6

我對Unity和依賴注入有點新。我試圖寫一個單元測試,是這樣的:在UnityContainer中註冊NUnit DynamicMock實例

[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

相關:http://stackoverflow.com/questions/2098937/proper-way-to-mock-repository-objects-for-unit-tests-using-moq-and-unity/2102104 – 2010-04-11 07:04:16

+0

你問過你的問題在Unity Codeplex網站上? http://unity.codeplex.com/你可能會在那裏得到答案。 – 2010-04-24 14:45:44

回答

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?如果沒有,我會嘗試深入挖掘並找出真正發生的事情。儘管這可能是一個限制。

+0

很明顯,你花了一些時間來研究這一點。非常感謝。 – Phil 2010-05-03 20:06:04

相關問題