web-dev-qa-db-fra.com

moq objects Renvoie la méthode, doit retourner un objet nul

Je développe une API Web, et l'un des tests que j'ai trouvé est que si le client effectue une opération GET avec un ID de test physique (le test physique est la ressource que je recherche) et que le test physique est introuvable , l'API Web doit renvoyer un état 404.

Maintenant, j'utilise le framework moq pour mes tests et j'ai le code suivant:

[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)
}

J'ai besoin de la méthode Returns () pour renvoyer un objet nul, qui sera ce que la méthode API réelle retournerait si la ressource n'est pas trouvée.

J'ai essayé d'envoyer null en tant que paramètre dans la méthode Returns () mais sans succès.

61
Daniel

Vous n'indiquez pas quelle était l'erreur, mais cela devrait fonctionner:

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

Je soupçonne que vous avez essayé de l'appeler avec Returns(null), ce qui fait que le compilateur se plaint car Returns est surchargé et il ne sait pas quelle méthode doit être appelée. La conversion en un type spécifique supprime l'ambiguïté.

174
Jeff Ogata

rt est un type de méthode de retour: FindById

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

2
Radhika Patwari