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;
}
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
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
Ich habe das Beispiel aktualisiert –