6

Ich bin etwas neu in Unity und Abhängigkeitsinjektion. Ich versuche, einen Unit-Test zu schreiben, die etwas geht:Registrieren von NUnit DynamicMock-Instanzen in einem UnityContainer

[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... 
} 

Wenn dieser Test ausgeführt wird, wirft der Behälter ein Argument innerhalb der RegisterInstance Methode mit der Meldung Value cannot be null. Parameter name: assignmentValueType.

Die obere Zeile des Stapels Spur ist at Microsoft.Practices.Unity.Utility.Guard.TypeIsAssignable(Type assignmentTargetType, Type assignmentValueType, String argumentName).

Warum kann ich keine MockInstance mit dem UnityContainer registrieren, und wie kann ich das umgehen?

+0

In Verbindung stehend: http://stackoverflow.com/questions/2098937/proper-way-to-mock-repository-objects-for-unit-tests-using-moq-andunity/2102104 –

+0

Haben Sie Ihre Frage gestellt auf der Unity Codeplex Seite? http://unity.codeplex.com/ Sie könnten dort eine Antwort erhalten. –

Antwort

3

Ich sehe das nicht. Ich benutze NUnit 2.5.5.10112 und Unity 2.0 (die mit EntLib ausgeliefert wird, die separate Version ist noch nicht verfügbar).

Update: Ich habe gerade mit 1.2 überprüft und ich sehe Ihr Verhalten. Das ist also ein Problem mit 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>()); 
     } 
    } 
} 

Wäre es möglich, dass Sie auf Unity 2.0 aktualisieren? Wenn nicht, werde ich versuchen, tiefer zu graben und herauszufinden, was wirklich los ist. Dies kann jedoch eine Beschränkung von 1,2 sein.

+0

Es ist offensichtlich, dass Sie sich etwas Zeit genommen haben, um dies zu untersuchen. Danke vielmals. – Phil

Verwandte Themen