Trapping Stato errore in MSBuild
-
21-08-2019 - |
Domanda
Come parte di alcune costruire automazione di esecuzione di test xUnit.net con MSBuild , sto correndo in un caso in cui ho bisogno di loop su un lotto di oggetti.
All'interno del ciclo, ho bisogno di rilevare se un'iterazione fallito, ma Voglio continuare l'esecuzione a prescindere. Poi, dopo il bit raggruppati, ho bisogno di sapere se uno o più errori si sono verificati al fine di segnalare il risultato di TeamBuild.
IOW, in pseudocodice:
Task Name=RunTests
CreateItems
ForEach item CallTarget Target=RunTest ContinueOnError=true
CombineNUnitResults
Report success/failure
Task Name=RunTest
XUnit item
Spero che questo può essere raggiunto senza un compito particolare (o hacking del xunit.net compito MSBuild come ha fatto Jonne). (Ma disposti a usare le attività MSBuild comunitari o DSC)
E @BradWilson: io questo è isnt possibile fare in modo pulito, sarò alla ricerca di un cambiamento di Jonne a la il compito NUnit per rendere anche nel compito xUnit
Soluzione
Vai afferrare 1.5 Beta. Abbiamo risolto questo con l'introduzione del parametro di uscita ExitCode al nostro xUnit compito MSBuild!
Altri suggerimenti
Questo è quello che facciamo:
<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)' != ''"/>
Questo verrà eseguito tutti i test di unità a prescindere dal fallimento, ma non riuscirà, dopo tutto sono stati eseguiti se ci fossero errori. Si noti ContinueOnError="true"
consentire loro tutti corrono e l'errore alle verifiche finali per vedere se qualcuno di loro non è riuscito (in NUnit 0 indica il successo, tutto il resto è un fallimento).
Nota: questo sta usando il compito MSBuildCommunityTasks NUnit, ma se si sta usando solo exec con l'exe NUnit, è possibile ottenere lo stesso effetto. L'uscita "ExitCode" è comune a qualsiasi compito che eredita da ToolTask.