MSBuild зависает после завершения NUnit - PullRequest
5 голосов
/ 17 ноября 2010

Я пытаюсь настроить MSBuild с NUnit в качестве драйвера для модульного тестирования, но сценарий продолжает зависать после завершения NUnit.Кажется, он не завершает свою работу и не позволяет MSBuild продолжить работу.
Я работаю в .NET 4.0 и использую NUnit 2.5.8.
Если я запускаю тест вручную или с помощью графического интерфейса пользователя (либо VS2010, либо NUnit) он работает нормально, но не при вызове MSBuild.

Буду признателен за любую помощь в поиске ошибок или просто напишите, где искать ответы.

РуководствоКоманда выглядит следующим образом:
C: \ ....> nunit \ nunit-console.exe buildbinaries \ YYYY.XXXX.Extractor.Test.IntegrationTest.dll /xml=nunit.xml

исокращенно MSBuild:

  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

  <!-- define folders for build output and reports -->
  <PropertyGroup>
    <BuildPath>buildbinaries\</BuildPath>
    <ReportPath>buildreports\</ReportPath>
    <ReleaseFolder>release_artefacts\</ReleaseFolder>
    <PublishFolder>c:\ZZZ Applications\published builds\</PublishFolder>
    <DeploymentFolder>\\seldclq99\ZZZ_Costanza_Dev$\</DeploymentFolder>
  </PropertyGroup>

  <PropertyGroup>
    <!-- specify assemblies that should be included in coverage report -->
    <NCoverAssemblyList>YYYY.XXXX.Extractor.Business.dll; YYYY.XXXX.Extractor.Common.dll YYYY.XXXX.Extractor.Configuration.dll YYYY.XXXX.Extractor.DAL.Access.dll YYYY.XXXX.Extractor.DAL.Facade.dll YYYY.XXXX.Extractor.Service.Contracts.dll YYYY.XXXX.Extractor.Service.dll YYYY.XXXX.Extractor.Service.Host.WebHost.dll YYYY.XXXX.Extractor.ServiceGateway.dll</NCoverAssemblyList>
  </PropertyGroup>

  <!-- define item group for deliverables -->
  <ItemGroup>
    <Binaries Include="$(BuildPath)/**/*.*" Exclude="$(BuildPath)nunit*" />
  </ItemGroup>

  <!--
  This is the default target that will be executed if MSBuild is not started
  with a specific target (this is decided by the DefaultTargets attribute in
  the root element of this XML document)
  -->
  <Target Name="BuildAndTest">
    <CallTarget Targets="SetupDirs" />
    <CallTarget Targets="Build" />
    <CallTarget Targets="UnitAndIntegrationTest" />
    <CallTarget Targets="FxCop" />
    <CallTarget Targets="CopyToReleaseFolder" />
  </Target>

  <!-- Setup folders used during the build -->
  <Target Name="SetupDirs">
    <RemoveDir Directories="$(ReportPath);$(BuildPath);$(ReleaseFolder)" ContinueOnError="true"/>
    <MakeDir Directories="$(ReportPath);$(BuildPath);$(ReleaseFolder);$(AssemblyVersionFolder)" ContinueOnError="true"/>
  </Target>

  <Target Name="Build">
    <!-- build the software using msbuild -->
    <!-- Build error in the Install build-->
    <MSBuild ContinueOnError="true" RebaseOutputs="false" Targets="Clean;Rebuild" Projects="YYYYXXXXExtractor.sln" Properties="Configuration=Release;OutDir=..\$(BuildPath)" />

  </Target>

  <!--Run the coverage stats-->
  <Target Name="UnitAndIntegrationTest">
      <Exec Command="nunit\nunit-console.exe buildbinaries\YYYY.XXXX.Extractor.Test.IntegrationTest.dll /xml=$(ReportPath)nunit.xml "/>
      <CallTarget Targets="UnitTest" />
  </Target>

  <Target Name="UnitTest">
      <Exec Command="nunit\nunit-console.exe buildbinaries\YYYY.XXXX.Extractor.Test.UnitTest.dll /xml=$(ReportPath)nunit.xml"/>
  </Target>

  <!-- Run FxCop  -->
  <!-- The ForceError.bat fires if the xml file is not found... aka an error was found -->
  <!-- The quiet command forces an Xml file ONLY if warnings or Errors are found -->
  <Target  Name="FxCop">
    <Exec  Command="..\tools\fxcop\FxCopCmd.exe /p:..\FxCopSettings.FxCop /o:$(ReportPath)fxcop.xml" />
    <Exec Condition="Exists('$(ReportPath)fxcop.xml')" Command="..\tools\fxcop\FX_Cop_Failed_Rule_Checks.bat" />

    <!--STATS: Run again but don't fail and this time run for all rules.-->
    <Exec  Command="..\tools\fxcop\FxCopCmd.exe /p:..\FxCopSettingsALLRULES.FxCop /o:$(ReportPath)fxCopAllRules.xml" />

  </Target >

Ответы [ 3 ]

4 голосов
/ 19 ноября 2010

У меня была такая же проблема с NUnit 2.5.8. На сайте nunit обсуждается некоторое зависание процесса тестирования. Я переключился на NUnit 2.5.7, и проблема ушла.

Похоже, это было исправлено пару недель назад в 2.5.9 .

2 голосов
/ 18 ноября 2010

Я заметил подобное поведение на нашем сервере сборки после обновления до .NET 4. Кажется, что MsBuild периодически зависает в командах NUnit, FxCop или Dotcover EXEC.Если вы проверите диспетчер задач, процесс для выполняемой извне команды (например, Nunit.exe) по-прежнему зависает.Если вы вручную завершите процесс, MsBuild продолжит свой веселый путь - что далеко от идеала!

Может ли это быть ошибкой в ​​последней версии MsBuild?Наш сервер сборки работал довольно успешно до обновления .NET 4.

1 голос
/ 19 ноября 2010

Если вы запустите ProcessExplorer на своем сервере, вы заметите, что создается внеполосный процесс, называемый nunit-agent, который в итоге блокирует nunit runner.

Я не подтвердил, что это исправлено в 2.5.9, но это может быть полезной информацией.

...