webentwicklung-frage-antwort-db.com.de

moq objects Gibt eine Methode zurück, die ein Null-Objekt zurückgeben soll

Ich entwickle eine Web-API, und einer der Tests, die mir eingefallen sind, ist, dass, wenn der Client eine GET-Operation mit einer ID für einen physischen Test durchführt (physischer Test ist die gesuchte Ressource), dieser physische Test nicht gefunden wird sollte die Web-API den Status 404 zurückgeben.

Jetzt verwende ich das moq-Framework für meine Tests und habe den folgenden Code:

[TestMethod]
public void then_if_physical_test_not_found_return_not_found_status()
{
    var unitOfWork = new Mock<IUnitOfWork>();
    var repository = new Mock<IRepository<PhysicalTest>>();
    repository.Setup(r => r.FindById(It.IsAny<int>())).Returns();
    unitOfWork.Setup(m => m.PhysicalTests).Returns(repository.Object);
    var pt = new PhysicalTestResource(unitOfWork.Object);
    HttpResponseMessage<PhysicalTest> response = pt.GetPhysicalTest(43);
    Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode)
}

Ich benötige die Methode Returns (), um ein Null-Objekt zurückzugeben. Dies ist das Ergebnis der tatsächlichen API-Methode, wenn die Ressource nicht gefunden wird.

Ich habe versucht, null als Parameter in der Methode Returns () zu senden, hatte aber keinen Erfolg.

61
Daniel

Sie geben nicht an, was der Fehler war, aber das sollte funktionieren:

unitOfWork.Setup(m => m.PhysicalTests).Returns((IRepository<PhysicalTest>)null);

Ich vermute, Sie haben versucht, es mit Returns(null) aufzurufen, was dazu führt, dass der Compiler sich beschwert, da Returns überladen ist und nicht weiß, welche Methode aufgerufen werden soll. Das Umwandeln in einen bestimmten Typ beseitigt die Mehrdeutigkeit.

174
Jeff Ogata

rt ist ein Rückgabetyp der Methode: FindById

repository.Setup(r => r.FindById(It.IsAny<int>())).Returns(Task.FromResult((rt)null));

2
Radhika Patwari