Я несколько плохо знаком с Единицей и внедрением зависимости. Я пытаюсь записать модульный тест, который проходит примерно так:
[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, и как я работаю вокруг этого?
Я этого не вижу. Я использую 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.