在UnityContainer中注册NUnit DynamicMock实例

时间:2010-04-09 18:50:14

标签: dependency-injection nunit mocking unity-container ioc-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...
}

执行此测试时,容器会在RegisterInstance方法中抛出一个ArgumentNullException,并显示消息Value cannot be null. Parameter name: assignmentValueType.

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

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

1 个答案:

答案 0 :(得分: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>());
        } 
    }
}

您是否可以更新到Unity 2.0?如果不是,我会尝试深入挖掘并找出真正发生的事情。这可能是对1.2的限制。