2017-08-22 1 views
0

J'ai un objet Mock dont j'essaie de configurer la méthode en lançant une exception lorsqu'il est exécuté, pour un cas de test unitaire particulier en utilisant le framework Moq.VerifyAll() avec les jetons <T>() dans Moq

var mockMySvc = new Mock<IMySvc>(); 

mockMySvc 
    .Setup(x=>x.SomeMethod()) 
    .Throws<Exception>(); 

//Execution of some code 

//At the assertions 
mockMySvc.VerifyAll(); 

Lors de l'exécution, le code se plaint de tous les expections de ne pas avoir mockMySvc été atteint, malgré le exception levée. Ai-je manqué quelque chose ou la méthode .VerifyAll() ne fonctionne pas avec la fonctionnalité .Throws().

Répondre

1

Je ne sais pas votre façon de le mettre en place, mais je le fais toujours de cette façon:

Assert.Throws<Exception>(() => myclass.SomeMethod()); 

De cette façon, vous ne avez pas besoin de vérifier quoi que ce soit.


Sur la base de votre commentaire Voici comment vous assurez-vous que l'exception est levée dans la méthode, de sorte que vous pouvez vérifier votre code à l'intérieur catch blocs.

[Test] 
public void Test1() 
{ 
    _filmService.Setup(f => f.FindById(It.IsAny<int>())).Throws<Exception>(); 
    _filmController.Test(); 
    _filmService.Verify(f => f.Exists(It.IsAny<Film>()), Times.Once); 
} 

Code actuel:

public ActionResult Test() 
{ 
    try 
    { 
     _filmService.FindById(-1); 
    } 
    catch (System.Exception) 
    { 
     _filmService.Exists(null); 
    } 
    return View(); 
} 

Ceci est juste un exemple je l'ai testé dans mon code et cela fonctionne correctement.

+0

Dans le cadre de 'someMethod()', j'ai un try catch block. L'essai doit lancer une exception au bloc de capture, et c'est ce que j'obtiens à travers le setup/throws dans mon code. Mon code ne renverrait pas une exception. Ce que vous avez affirmé est une supposition que la méthode jetterait une exception. –

+1

Je comprends maintenant. Exécutez-vous réellement la méthode 'SomeMethod'? Jetez un oeil ici: http://www.syntaxsuccess.com/viewarticle/mock-exceptions-using-moq – FCin

+0

oui, c'est ce que j'essaie de faire - simuler une exception. Je pense que je ne devrais pas vérifier une exception lancée par VerifyAll(), mais plutôt vérifier que le bon type d'exception a été enregistré. Je vous remercie! Cela m'a aidé à comprendre ce que je faisais de mal logiquement. –