2009-06-29 18 views
3

Dans le cadre de certains build automation of running xUnit.net tests with MSBuild, je suis confronté à un cas où je dois faire une boucle sur un lot d'éléments.État d'erreur de recouvrement dans MSBuild

À l'intérieur de la boucle, j'ai besoin de détecter si une itération a échoué, mais Je veux continuer à exécuter malgré tout. Ensuite, après le bit batched, j'ai besoin de savoir si une ou plusieurs erreurs se sont produites afin de signaler le résultat à TeamBuild.

OIEau, en pseudocode:

Task Name=RunTests 
    CreateItems 
    ForEach item CallTarget Target=RunTest ContinueOnError=true 
    CombineNUnitResults 
    Report success/failure 

Task Name=RunTest 
    XUnit item 

J'espère que cela peut être réalisé sans une tâche personnalisée (ou le piratage de la xunit.net MSBuild comme Jonne a). (Mais souhaitant utiliser les tâches MSBuild Community ou Sdc)

Et @BradWilson: Ce n'est pas possible de faire proprement, je chercherai le changement de Jonne à la tâche NUnit pour en faire aussi la tâche xunit

Voir aussi: How do I get Team Build to show test results and coverage for xUnit.net test suite?

Répondre

6

Voici ce que nous faisons:

<NUnit Assemblies="@(TestAssemblies)" 
    ToolPath="$(NUnitPath)" 
    WorkingDirectory="%(TestAssemblies.RootDir)%(TestAssemblies.Directory)" 
    OutputXmlFile="@(TestAssemblies->'%(FullPath).$(NUnitFile)')" 
    Condition="'@(TestAssemblies)' != ''" 
    ExcludeCategory="$(ExcludeNUnitCategories)" 
    ContinueOnError="true"> 
    <Output TaskParameter="ExitCode" ItemName="NUnitExitCodes"/> 
</NUnit> 

<Error Text="Test error(s) occured" Code="%(NUnitExitCodes.Identity)" Condition=" '%(NUnitExitCodes.Identity)' != '0' And '@(TestAssemblies)' != ''"/> 

Cela exécutera tous les tests unitaires quel que soit l'échec, mais échouera après tout ont été exécuté s'il y avait des échecs. Remarque ContinueOnError="true" s'assure qu'ils sont tous exécutés et l'erreur à la fin vérifie si l'un d'entre eux a échoué (en nunit 0 indique le succès, tout le reste est un échec).

Remarque: cela utilise la tâche MSUncommunautaireTasks NUnit, mais si vous utilisez simplement exec avec nunit exe, vous pouvez obtenir le même effet. La sortie "ExitCode" est commune à toute tâche qui hérite de ToolTask.

+0

Salut Mike, merci de prendre le temps de répondre. De ma lecture, ExitCode est une propriété de tâche NUnit personnalisée, qui n'est pas implémentée dans la tâche xUnit. (La tâche NUnit prend également plusieurs assemblages (xUnit ne l'est pas, c'est pourquoi son paramètre s'appelle Assembly et il y a une discussion sur le xUnit codeplex Discussions re that)). Maintenant, j'ai lu le bit Note, je vois que je dois faire plus de recherches. Je vais supprimer ce commentaire et le remplacer par quelque chose de plus sensé quand je fais cela (j'avais pensé que le ExitCode était uniquement sur NUnit et Exec). Bon travail J'ai le livre MSPress sur le chemin! –

+0

Ah - très bon point, la tâche xunit ne dérive pas de ToolTask, créant ainsi un [problème sur le site codéplex le demandant] (http://xunit.codeplex.com/WorkItem/View.aspx?WorkItemId=7954). Quand cela est fait, je vais juste devoir faire des choses MSBuild propres pour itérer sur la liste d'assemblage et fusionner les XML –

+0

+1 - J'ai eu un problème similaire et, alors que cette réponse ne l'a pas résolu directement, elle m'a conduit à la bonne direction –