2017-02-21 5 views
0

Ich habe eine Schnittstelle Ich bin versucht, Mock-up für Unit-Tests. Es verfügt über eine Methode, die zwei Parameter, Name und Wert akzeptiert und gibt einen DbParameter von diesen Parametern gebaut werdenWie richte ich eine Methode ein, um einen DbParameter zurückzugeben?

public interface IDbUnitOfWork { 
    DbParameter BuildParameter(string name, object value); 
} 

ich einen Testfall einzurichten versucht bin, die ich kann eine zurück DbParameter Mock-up und ich habe Ärger.

unitOfWorkMock = new Mock<IDbUnitOfWork>(); 
    unitOfWorkFactoryMock = new Mock<IUnitOfWorkFactory>(); 
    unitOfWorkFactoryMock.Setup(u => u.LoadUnitOfWork()).Returns(new Mock<IDbUnitOfWork>().Object); 
    unitOfWorkMock 
      .Setup(u => u.BuildParameter(It.IsAny<string>(), It.IsAny<object>())) 
      .Returns((name, value) => ASDASDASDASD); 

Wie kann ich einen DbParameter zurückgeben, der mit übergebenen Parametern oder einem Mocked up DbParameter gefüllt ist?


Solution (dank Patrick)

unitOfWorkMock 
    .Setup(u => u.BuildParameter(It.IsAny<string>(), It.IsAny<object>())) 
    .Returns((string name, object value) => Mock.Of<DbParameter>(p=> p.ParameterName == name && p.Value == value)); 

Antwort

1

Da DbParameter is abstract und so verspottet werden kann, glaube ich, das den Trick tun sollten:

unitOfWorkMock 
    .Setup(u => u.BuildParameter(It.IsAny<string>(), It.IsAny<object>())) 
    .Returns((name, value) => 
     Mock.Of<DbParameter>(x => x.ParameterName == name && x.Value == value) 
    ); 
+0

Dank Patick! Du hast mich auf einen neuen Weg gebracht und ich habe herausgefunden, was mein Problem ist. Es endete damit, dass ich die Datentypen von Name und Wert spezifizieren musste. Ich werde die Frage aktualisieren und Ihnen die Antwort gutschreiben. – rick

+1

Ah, das macht Sinn. Fühlen Sie sich frei, Ihre Lösung als Antwort hinzuzufügen und akzeptieren Sie stattdessen! –

+0

Nein, du hast es beantwortet. – rick

Verwandte Themen