103 votes

Méthode Returns d'objets moq, devrait renvoyer un objet nul

Je développe une API Web, et l'un des tests que j'ai mis en place est que, si le client effectue une opération GET avec un ID de Test Physique (Test Physique étant la ressource que je recherche) et que ce test physique n'est pas trouvé, l'API Web doit renvoyer un statut 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();
    var repository = new Mock>();
    repository.Setup(r => r.FindById(It.IsAny())).Returns();
    unitOfWork.Setup(m => m.PhysicalTests).Returns(repository.Object);
    var pt = new PhysicalTestResource(unitOfWork.Object);
    HttpResponseMessage response = pt.GetPhysicalTest(43);
    Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode)
}

J'ai besoin que la méthode Returns() renvoie un objet null, qui sera ce que la méthode API réelle retournera 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.

295voto

adrift Points 24386

Vous ne précisez pas quelle était l'erreur, mais cela devrait fonctionner :

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

Je suppose 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 appeler. Le fait de caster vers un type spécifique supprime l'ambiguïté.

12voto

Radhika Patwari Points 121

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

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

12voto

Jorge Freitas Points 367

Si vous recevez une erreur comme celle-ci :

entrez la description de l'image ici

Vous devez simplement spécifier le paramètre d'entrée de la méthode 'Returns'. Jetez un œil à mon exemple :

_ = _fileStorage.Setup(x => x.LoadDocument(It.IsAny())).Returns(value: null);

5voto

Thanh Truong Points 556

Organisation est un type de retour de la méthode : Get

mockCache
    .Setup(cache => cache.Get(It.IsAny(), It.IsAny(),It.IsAny()))
    .Returns(value: null as Organisation);

2voto

En plus de mettre le membre à null comme mentionné dans la réponse acceptée, cette approche devrait également fonctionner.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X