Ich entwickle eine Web-API, und einer der Tests, die ich mir ausgedacht habe, ist, dass, wenn der Client eine GET-Operation mit einer physischen Test-ID ausführt (physischer Test ist die Ressource, nach der ich suche) und dieser physische Test nicht gefunden wird sollte die Web-API einen 404-Status 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 Returns () -Methode, um ein Nullobjekt zurückzugeben. Dies ist das, was die eigentliche API-Methode zurückgeben würde, wenn die Ressource nicht gefunden wird.
Ich habe versucht, null als Parameter in der Returns () -Methode zu senden, hatte aber keinen Erfolg.
quelle
repository.Object
, dies der Typ war, der von zurückgegeben wurdePhysicalTests
.x
es sich entweder um eine konkrete Klasse oder um eine abstrakte Klasse, dieGetFoo()
nicht virtuell / überschreibbar ist.Returns
unterschiedliche Namen für ihren Parameter haben, die Mehrdeutigkeit auch durch Schreiben auflösen können:... .Returns(value: null)
(Hiervalue
ist nur der Name des Parameters in der gewünschten Überladung ist kein Schlüsselwort).rt
ist eine Rückgabemethode:FindById
repository.Setup(r => r.FindById(It.IsAny<int>())).Returns(Task.FromResult((rt)null));
quelle