2010-11-17 56 views
4

我试图设置一个NUnit作为单元测试驱动程序的MSBuild,但脚本在NUnit完成后仍然挂起。它似乎没有最终确定其工作,并让MSBuild继续工作。
我正在使用.NET 4.0并使用NUnit 2.5.8。
如果我手动运行测试或使用gui(VS2010或NUnit),它可以正常运行,但不会在MSBuild调用时运行。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 > 

回答

1

,因为升级到.NET 4的MSBuild似乎在任NUnit的,FxCop的或间歇DOTC挂我已经注意到了生成服务器上类似的行为通过EXEC命令。如果您检查任务管理器,则外部执行的命令(例如Nunit.exe)的进程仍处于闲置状态。如果你手动杀死这个进程,MsBuild继续它的快乐方式 - 这远非理想!

这可能是最新版本的MsBuild中的错误吗?我们的构建服务器运行得非常愉快,直到.NET 4升级。

3

我和NUnit 2.5.8有同样的问题。在nunit网站上有关于测试过程悬挂的一些讨论。我切换到NUnit 2.5.7,问题就消失了。

它看起来像几个星期前在2.5.9

+0

由于未知原因,2.5.7在我们的机器上根本无法启动。它不会加载nunit.core.dll。所以这对我来说不是一个可行的解决方案。 – 2010-11-22 06:57:18

+0

这个问题在最新的nunit中还没有解决。如果您有兴趣,可以在这里跟踪错误:https://bugs.launchpad.net/nunitv2/+bug/602761 – 2011-09-02 14:56:33

0

如果你在你的服务器上运行ProcessExplorer,你会注意到一个名为nunit-agent的带外进程被产生,最终阻塞了nunit亚军。

我还没有验证,这是固定在2.5.9,但它可能是一些可能有用的信息。

+0

是的,每当我手动终止MSBuild命令提示符时,nunit-agent都会停留。 – 2010-11-22 06:58:53

相关问题