Регистрация экземпляров NUnit DynamicMock в UnityContainer

Я новичок в Unity и внедрении зависимостей. Я пытаюсь написать модульный тест, который выглядит примерно так:

[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 и как мне это обойти?


person Phil    schedule 09.04.2010    source источник
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.

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