7
votes

ASYNC Lambda Expressions à Xunit Assert.throws

J'ai du code de test affirmant duplicate utilisateur s ne peut pas être créé via mon USEREPOSitory .

user.cs: xxx

userpository.cs: xxx

userpositoryTestS.cs: xxx

Quand j'exécute ce test d'unité, xunit.sdk.themrowsException est lancé (c'est-à-dire mon InvalidOperationException était pas jeté):

assert.throws () échec Attendu: système.invalidoperationException Réel: (aucune exception n'a été lancée)

du débogueur, getDuplicateasync () a été évalué mais lorsque la requête LINQ a été exécutée, le résultat n'a jamais été retourné et aucune exception n'a été lancée. Quelqu'un peut-il aider?


4 commentaires

Quelle version xunit utilisez-vous?


Dupliqué possible de Comment gérer les exceptions levées Par tâches de Xunit .Net's Astert.thRows ?


@Stephencleary Avec votre permission, je mettrai à jour votre réponse sur ce lien pour souligner que Xunit 2 a abordé ce problème.


@Wim j'utilise xunit 1.9.2. @DCastro a eu raison, j'ai mis à jour mon Xunit et le problème a été parti.


3 Réponses :


18
votes

assert.thRrows (au moins sur la version 1.9.2) n'est pas au courant de l'ASYNC. Ceci a été corrigé dans la version 2, qui a maintenant un Gist de Haacked .


3 commentaires

Je suis assez sûr que j'ai vu l'équipe Xunit mentionner que la version 2.x sera async -aware.


@Erikschierboom Vous avez raison, je viens de regarder leur code source et j'ai mis à jour mon message.


C'est un travail ok autour. Il a juste une sémantique légèrement différente que celle de Xunit, car cela attrapera également toutes les exceptions dérivées de T où Xunit n'atteignit que T et non des types dérivés.



-1
votes

Cela fonctionne pour moi:

Assert.Throws<AbpValidationException>(() => _personAppService.CreatePersonAsync(new CreatePersonInput { Name = null }));


1 commentaires

Cela ne se produira que si CreateEppersonasync n'est pas réellement asynchrone; Et si c'est la mise en œuvre, je lance l'exception lorsqu'il est appelé, plutôt que de renvoyer une tâche qui représente l'exception. Dans des situations réelles, ce dernier est susceptible d'être ce qui se passe réellement, c'est ce qui doit être testé. Ce n'est qu'une option s'il est important que la réelle implémentation ait réellement le comportement précédent.



0
votes

Xunit Maintenant gérer ASSERT.THROWASYNC par défaut


0 commentaires