在UnityContainer中注册NUnit DynamicMock实例

Phi*_*hil 6 nunit dependency-injection mocking ioc-container unity-container

我对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...
}
Run Code Online (Sandbox Code Playgroud)

执行此测试时,容器会在RegisterInstance方法中使用该消息抛出ArgumentNullException Value cannot be null. Parameter name: assignmentValueType.

堆栈跟踪的顶行是at Microsoft.Practices.Unity.Utility.Guard.TypeIsAssignable(Type assignmentTargetType, Type assignmentValueType, String argumentName).

为什么我不能在UnityContainer中注册MockInstance,我该如何解决这个问题呢?

Ade*_*ler 3

我没有看到这个。我正在使用NUnit 2.5.5.10112Unity 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>());
        } 
    }
}
Run Code Online (Sandbox Code Playgroud)

请问可以更新到Unity 2.0吗?如果没有,我会尝试更深入地挖掘并找出到底发生了什么。但这可能是 1.2 的限制。