Вот что мы делаем:
<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)' != ''"/>
Это запустит все модульные тесты, независимо от сбоя, но не выполнится после того, как все были запущены, если были какие-либо сбои. Примечание ContinueOnError="true"
гарантирует, что все они запущены, а Ошибка в конце проверяет, не произошла ли какая-либо из них (в nunit 0 означает успех, все остальное - сбой).
Примечание: это использует задачу MSBuildCommunityTasks NUnit, но если вы просто используете exec с nunit exe, вы можете получить тот же эффект. Выходной «ExitCode» является общим для любой Задачи, которая наследуется от ToolTask.