2016-07-21 5 views
0

Ich versuche, wie diese Einrichtung moq:Wie Setup IRepository <T>

[Test] 
public void Observatoins_Were_Returned() 
{ 
    using (var mock = AutoMock.GetLoose()) 
    { 
     // Arrange 
     mock.Mock<IRepository<WspObservation>>() 
      .Setup(x => x.GetAll()) 
      .Returns(_observations); 

     var sut = mock.Create<CommonServices>();        
     WspResponse wspResponse; 

     // Act 
     var wspObservations = sut.GetAllObservations(out wspResponse); 
     var expectedErrorCode = ResponseCodes.SUCCESS; 

     // Assert 
     // Assert.AreEqual(expectedErrorCode, wspResponse.ResponseCode); 

    } 
} 

aber wenn GetAllObservations() Funktion in den eigentlichen Code null kehrt aufgerufen wird.

In der tatsächlichen Code IRepository ist Abhängigkeit injiziert, die gut funktioniert.

Objekt, das zurückgegeben wird, sieht so aus.

 var _observations = new List<WspObservation>(); 
     _observations.Add(new WspObservation() { DeviceName = "Devcie One", Steps = "3000" }); 
     _observations.Add(new WspObservation() { DeviceName = "Devcie One", Steps = "2000" }); 

die eigentliche Funktion, die getestet wird, sieht wie folgt aus

public List<WspObservation> GetAllObservations(out WspResponse getAllWspObservationsResponse) 
    { 
     List<WspObservation> allWspObservations = new List<WspObservation>(); 
     getAllWspObservationsResponse = new WspResponse(); 
     try 
     { 
      //some other Business Logic 
      allWspObservations = _wspObsrep.GetAll().ToList(); 
      //some other Business Logic 
     } 
     catch (Exception ex) 
     { 
      getAllWspObservationsResponse.ResponseCode = ResponseCodes.DatabaseGetError; 

     } 
     return allWspObservations; 
    } 

Dependency Injection ähnliche Was

private IRepository<WspObservation> _wspObsrep; 

    public CommonServices(IRepository<WspObservation> wspObsrep) 
    { 
     _wspObsrep = wspObsrep; 
    } 
+0

Bitte geben Sie eine [MCVE], so dass Ihr Problem und eine mögliche Lösung zur Verfügung gestellt reproduziert werden kann. Ihr aktuelles Beispiel enthält nicht genügend Details, um Ihr Problem zu reproduzieren. – Nkosi

+0

Sieht so aus, als ob Sie einen Mock von 'IRepository ' erstellen und seine 'GetAll()' Methode einrichten, um '_observations' zurückzugeben, aber Sie behalten keinen Verweis auf den Mock, was bedeutet, dass Sie Ihren Code nicht bekommen können Mock von 'CommonServices', um es zu verwenden, was bedeutet, dass Ihre Einrichtung nie aufgerufen wird. Da Sie mit losen Mocks arbeiten, erstellt das Framework ein eigenes 'IRepository ', wenn es eines benötigt, und alle Methoden geben null zurück. Sie müssen einen Weg finden, um Ihren Spott in "CommonServices" zu bekommen. – wablab

+0

Ich habe das Beispiel aktualisiert –

Antwort

0

sieht die Absicht

var sut = mock.Create<CommonServices>(); 

Isn‘ t es besser t o Erstellen Sie das reale SUT-Objekt und injizieren Sie den IRepository-Mock?

Ich würde es auf diese Weise tun:

var repoMock = mock.Mock<IRepository<WspObservation>>() 
     .Setup(x => x.GetAll()) 
     .Returns(_observations); 

var sut = new CommonServices(repoMock); 
Verwandte Themen