我对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...
}
执行此测试时,容器会在RegisterInstance方法中抛出一个ArgumentNullException,并显示消息Value cannot be null. Parameter name: assignmentValueType.
堆栈跟踪的第一行是at Microsoft.Practices.Unity.Utility.Guard.TypeIsAssignable(Type assignmentTargetType, Type assignmentValueType, String argumentName)
。
为什么我不能在UnityContainer中注册MockInstance,我该如何解决这个问题?
答案 0 :(得分:3)
我没有看到这个。我正在使用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的限制。