Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MSBuild hangs after NUnit is finished

Tags:

msbuild

nunit

I'm trying to set up a MSBuild with NUnit as unit test driver but the script keeps hanging after NUnit is done. It doesn't seem to finalize its work and let MSBuild get on with its job.
I'm working in .NET 4.0 and using NUnit 2.5.8.
If I run the test manually or using the gui (either VS2010 or NUnit) it works fine but not when called by MSBuild.

I'd appreciate any help with error finding or just a heads up on where to looks for answers.

The manual command looks like this:
C:\....>nunit\nunit-console.exe buildbinaries\YYYY.XXXX.Extractor.Test.IntegrationTest.dll /xml=nunit.xml

and the abbreviated 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 >
like image 512
Karl Eklund Avatar asked Nov 17 '10 12:11

Karl Eklund


3 Answers

I had the same problem with NUnit 2.5.8. There is some discussion of this at the nunit site about the test process hanging. I switched to NUnit 2.5.7 and the problem went away.

It looks like this was fixed a couple of weeks ago in 2.5.9.

like image 172
Brian Walker Avatar answered Nov 15 '22 21:11

Brian Walker


I have noticed similar behaviour on out build server since upgrading to .NET 4. MsBuild seems to intermittently hang on either NUnit, FxCop or Dotcover EXEC commands. If you check task manager the process for externally executed command (e.g. Nunit.exe) is still hanging around. If you manually kill the process MsBuild continues on it's merry way - which is far from ideal!

Could this be a bug in the latest version of MsBuild? Our build server was running quite happily until the .NET 4 upgrade.

like image 30
IainJMitchell Avatar answered Nov 15 '22 21:11

IainJMitchell


If you run ProcessExplorer on your server you will notice that an out of band process called nunit-agent is spawned which ends up blocking the nunit runner.

I have not validated that this is fixed in 2.5.9, but it might be some info that could be helpful.

like image 1
Steven Hoff Avatar answered Nov 15 '22 20:11

Steven Hoff