Mendaftarkan Instans NUnit DynamicMock di UnityContainer

Saya agak baru dalam Unity dan injeksi ketergantungan. Saya mencoba menulis unit test yang berbunyi seperti ini:

[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...
}

Saat pengujian ini dijalankan, container melemparkan ArgumentNullException ke dalam metode RegisterInstance dengan pesan Value cannot be null. Parameter name: assignmentValueType.

Baris teratas pelacakan tumpukan adalah at Microsoft.Practices.Unity.Utility.Guard.TypeIsAssignable(Type assignmentTargetType, Type assignmentValueType, String argumentName).

Mengapa saya tidak bisa mendaftarkan MockInstance dengan UnityContainer, dan bagaimana cara mengatasinya?


person Phil    schedule 09.04.2010    source sumber
comment
Terkait: stackoverflow.com/questions/2098937/   -  person Mark Seemann    schedule 11.04.2010
comment
Sudahkah Anda menanyakan pertanyaan Anda di situs Unity Codeplex? unity.codeplex.com Anda mungkin mendapatkan jawabannya di sana.   -  person Ade Miller    schedule 24.04.2010


Jawaban (1)


Saya tidak melihat ini. Saya menggunakan NUnit 2.5.5.10112 dan Unity 2.0 (yang dikirimkan bersama EntLib, rilis terpisah belum tersedia).

Pembaruan: Saya baru saja memeriksa dengan 1.2 dan saya melihat perilaku Anda. Jadi ini adalah masalah dengan 1.2.

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>());
        } 
    }
}

Bisakah Anda memperbarui ke Unity 2.0? Jika tidak, saya akan mencoba menggali lebih dalam dan mencari tahu apa yang sebenarnya terjadi. Ini mungkin merupakan batasan 1.2.

person Ade Miller    schedule 01.05.2010
comment
Jelas sekali Anda meluangkan waktu untuk menyelidiki hal ini. Terima kasih banyak. - person Phil; 04.05.2010