การลงทะเบียนอินสแตนซ์ NUnit DynamicMock ใน UnityContainer

ฉันค่อนข้างใหม่กับ Unity และการพึ่งพาการฉีด ฉันกำลังพยายามเขียน Unit Test ที่มีลักษณะดังนี้:

[Test]
public void Test()
{
    UnityContainer container = new UnityContainer();
    DynamicMock myMock = new DynamicMock(typeof(IMyInterface));
    container.RegisterInstance(typeof(IMyInterface), myMock.MockInstance);  //Error here

    // Continue unit test...
}

เมื่อดำเนินการทดสอบนี้ คอนเทนเนอร์จะส่ง ArgumentNullException ภายในเมธอด RegisterInstance พร้อมด้วยข้อความ Value cannot be null. Parameter name: assignmentValueType.

บรรทัดบนสุดของการติดตามสแต็กคือ at Microsoft.Practices.Unity.Utility.Guard.TypeIsAssignable(Type assignmentTargetType, Type assignmentValueType, String argumentName)

เหตุใดฉันจึงไม่สามารถลงทะเบียน MockInstance กับ UnityContainer ได้ และฉันจะแก้ไขปัญหานี้ได้อย่างไร


comment
ที่เกี่ยวข้อง: stackoverflow.com/questions/2098937/   -  person Mark Seemann    schedule 11.04.2010
comment
คุณได้ถามคำถามของคุณบนเว็บไซต์ Unity Codeplex หรือไม่? unity.codeplex.com คุณอาจได้รับคำตอบที่นั่น   -  person Ade Miller    schedule 24.04.2010


คำตอบ (1)


ฉันไม่เห็นสิ่งนี้ ฉันใช้ NUnit 2.5.5.10112 และ Unity 2.0 (ซึ่งมาพร้อมกับ EntLib แต่เวอร์ชันแยกต่างหากยังไม่พร้อมใช้งาน)

อัปเดต: ฉันเพิ่งตรวจสอบกับ 1.2 และฉันเห็นพฤติกรรมของคุณ นี่คือปัญหาของ 1.2.1

namespace UnityRepro
{
    public interface IMyInterface
    {
        void Foo();
    }

    public class Class1
    {
        [Fact] 
        public void Test() 
        { 
            UnityContainer container = new UnityContainer(); 
            DynamicMock myMock = new DynamicMock(typeof(IMyInterface)); 
            container.RegisterInstance(typeof(IMyInterface), myMock.MockInstance);  //Error here 

            Assert.NotNull(container.Resolve<IMyInterface>());
        } 
    }
}

เป็นไปได้ไหมที่คุณจะอัปเดตเป็น Unity 2.0? ถ้าไม่เช่นนั้น ฉันจะพยายามเจาะลึกลงไปอีกและค้นหาว่าเกิดอะไรขึ้นจริงๆ นี่อาจเป็นข้อจำกัดของ 1.2 แม้ว่า

person Ade Miller    schedule 01.05.2010
comment
เห็นได้ชัดว่าคุณใช้เวลาทั้งวันเพื่อตรวจสอบเรื่องนี้ ขอบคุณมาก. - person Phil; 04.05.2010