169 votes

Comment sauter des tests spécifiques dans xUnit en fonction de la plate-forme actuelle ?

  • J'ai un assemblage que j'ai construit sous Windows
  • Je veux exécuter les tests xUnit sur mono sous Linux.

Cependant, j'ai constaté que si 400 de ces tests peuvent s'exécuter (dans l'ordre), certains tests bloquent l'exécution de xUnit ou l'arrêtent complètement.

Je n'ai pas soins si certains tests ne peuvent pas être exécutés sous Linux, c'est que certains tests sont liés au DTC et à certains gommes non gérées que nous n'avons pas besoin de prendre en charge.

Ce que je veux cependant, c'est appliquer un ignore à ces tests, et que le fait que le test ait été ignoré soit signalé correctement dans la sortie de la compilation.

La question peut se résumer à un certain nombre de solutions possibles.

  • Comment exécuter des tests spécifiques dans xUnit via le lanceur de console (je n'ai pas trouvé de documentation à ce sujet, peut-être que je ne cherche pas assez) ?
  • Est-il possible d'aller dans l'autre sens et de dire "Voici un assemblage, veuillez ignorer ces tests spécifiques" ?
  • Il a été suggéré que l'attribution d'un attribut à ces tests serait un meilleur moyen de documenter formellement le fait que ces tests sont spécifiques à une plate-forme.

Si je pouvais éviter de trop modifier le code original, ce serait formidable, car le code n'est pas vraiment à moi, et l'application de nombreux hacks multi-plateformes ne serait probablement pas très bien perçue.

2voto

citizenmatt Points 3031

Ce serait une utilisation idéale des traits, mais malheureusement, ni la ligne de commande ni le fichier de projet xml ne prennent en charge le filtrage basé sur les traits. Cela vaudrait la peine d'ajouter une question sur le site codeplex à ce sujet.

0voto

dpnmn Points 41

Pour compléter les réponses précédentes concernant SkippableFact : notez que chacun des tests est toujours construit - le constructeur est exécuté.

Si le code du constructeur d'une classe de base prend beaucoup de temps, une autre solution consiste à rassembler les cas de test spécifiques à l'environnement dans des fichiers appropriés et à exécuter la vérification de l'environnement dans le constructeur :

        if (!SupportsTemporalQueries())
            throw new SkipException("This test class only runs in environments support temporal queries");

Cela peut accélérer considérablement l'exécution du test. Dans notre système, nous étendons soit une classe de test de base "générique" (qui fonctionne dans tous les environnements), soit une classe de test de base spécifique à l'environnement. Je trouve cela plus facile à maintenir que le filtrage dans les pipelines ou d'autres solutions.

-1voto

hoserdude Points 629

Ce problème est maintenant résolu dans la version 1.8 - vous pouvez filtrer sur les Traits. Voir ce qui suit journal des problèmes .

Mise à jour : Les Traits fonctionnent avec le runner de la console mais pas avec MSBuild, j'ai ajouté une demande de fonctionnalité pour ce support.

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