Msbuild Net和NUnit-测试完成,但任务没有';T

Msbuild Net和NUnit-测试完成,但任务没有';T,msbuild,nunit,cruisecontrol.net,nant,Msbuild,Nunit,Cruisecontrol.net,Nant,我有一个CruiseControl.Net安装程序,使用Nant清理以前的日志,然后启动VS项目的msbuild,最后运行nunit控制台执行测试 它似乎构建了几秒钟(很好),然后开始运行600个测试,这大约需要一分钟。然而,即使日志文件在那里,它也会在那里“无所事事”10分钟,此时构建超时,进程退出。然后,CruiseControl.NET网页将结果显示为失败,但有一个例外: ThoughtWorks.CruiseControl.Core.Tasks.BuilderException: Com

我有一个CruiseControl.Net安装程序,使用Nant清理以前的日志,然后启动VS项目的msbuild,最后运行nunit控制台执行测试

它似乎构建了几秒钟(很好),然后开始运行600个测试,这大约需要一分钟。然而,即使日志文件在那里,它也会在那里“无所事事”10分钟,此时构建超时,进程退出。然后,CruiseControl.NET网页将结果显示为失败,但有一个例外:

ThoughtWorks.CruiseControl.Core.Tasks.BuilderException: Command Line Build timed out (after 600 seconds)
   at ThoughtWorks.CruiseControl.Core.Tasks.ExecutableTask.Execute(IIntegrationResult result)
   at ThoughtWorks.CruiseControl.Core.Tasks.TaskBase.Run(IIntegrationResult result)
   at ThoughtWorks.CruiseControl.Core.Project.RunTask(ITask task, IIntegrationResult result, Boolean isPublisher)
   at ThoughtWorks.CruiseControl.Core.Project.RunTasks(IIntegrationResult result, IList tasksToRun, Dictionary`2 parameterValues)
   at ThoughtWorks.CruiseControl.Core.Project.Run(IIntegrationResult result)
   at ThoughtWorks.CruiseControl.Core.IntegrationRunner.Build(IIntegrationResult result)
   at ThoughtWorks.CruiseControl.Core.IntegrationRunner.Integrate(IntegrationRequest request) BaseDirectory: , Executable: C:\Program Files\NUnit 2.5.8\bin\net-2.0\nunit-console.exe
下面是ccnet.config脚本。我已经尝试过将超时时间改为3分钟,以防与此有关,但即使这确实有效(没有),这也是一个狡猾的黑客行为,当测试完成运行时,他们应该优雅地退出

我已经在命令行上运行了这个命令,并确认它只需要大约一分钟的时间。有什么理论吗

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">

    <project name="CodeTests">
      <workingDirectory>C:\Source\Wholesale\Comp.EventControl.TestingFramework\</workingDirectory>
      <artifactDirectory>C:\Source\Wholesale\Comp.EventControl.TestingFramework\</artifactDirectory>

    <prebuild>
    <!-- clean nunit output to avoid CCNET reporting
           about previous build tests if current build fails -->
      <nant>
        <executable>C:\Nant\bin\nant.exe
        </executable>
        <baseDirectory>C:\Source\Wholesale\Comp.EventControl.TestingFramework</baseDirectory>
        <nologo>false</nologo>
        <buildFile>nant.build</buildFile>
        <targetList>
          <target>cleanNunit</target>
        </targetList>
      </nant>
    </prebuild>

    <tasks>
        <msbuild>
            <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
            </executable>
            <workingDirectory>C:\Source\Wholesale\Comp.EventControl.TestingFramework\CodeReboot
            </workingDirectory>
        <projectFile>CodeReboot.sln</projectFile >
            <buildArgs>/noconsolelogger 
            /v:quiet 
            /noconlog 
            /p:Configuration=Debug
            /p:ReferencePath="C:\Program Files\NUnit 2.5.8\bin;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
            /p:AdditionalReferencePath="C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
            </buildArgs>
            <targets>ReBuild</targets >
            <timeout>180</timeout >
            <logger>c:\Program Files\CruiseControl.NET\server\Rodemeyer.MsBuildToCCNet.dll</logger>

        </msbuild>
        <exec>
            <executable>C:\Program Files\NUnit 2.5.8\bin\net-2.0\nunit-console.exe
            </executable >
            <buildArgs>/xml:C:\Source\Wholesale\Comp.EventControl.TestingFramework\nunit-results.xml
            /nologo C:\Source\Wholesale\Comp.EventControl.TestingFramework\CodeReboot\CodeReboot\bin\Debug\CodeReboot.dll
            </buildArgs>
        </exec>
    </tasks>
    <publishers>
      <merge>
        <files>
          <file>C:\Source\Wholesale\Comp.EventControl.TestingFramework\nunit-results.xml
          </file>
        </files>
      </merge>
      <xmllogger />
      <statistics />
      <artifactcleanup cleanUpMethod="KeepLastXBuilds"
        cleanUpValue="20" />
    </publishers>

    </project>
</cruisecontrol>

C:\Source\Wholesale\Comp.EventControl.TestingFramework\
C:\Source\Wholesale\Comp.EventControl.TestingFramework\
C:\Nant\bin\Nant.exe
C:\Source\Wholesale\Comp.EventControl.TestingFramework
假的
南特大厦
干净的
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
C:\Source\Wholesale\Comp.EventControl.TestingFramework\code重新启动
CodeReboot.sln
/noconsolelogger
/v:安静
/noconlog
/p:配置=调试
/p:ReferencePath=“C:\Program Files\NUnit 2.5.8\bin;C:\Program Files\Reference Assembly\Microsoft\Framework\.NETFramework\v4.0”
/p:AdditionalReferencePath=“C:\Program Files\Reference Assembly\Microsoft\Framework\.NETFramework\v4.0”
重建
180
c:\Program Files\CruiseControl.NET\server\Rodemeyer.MsBuildToCCNet.dll
C:\Program Files\NUnit 2.5.8\bin\net-2.0\NUnit-console.exe
/xml:C:\Source\Wholesale\Comp.EventControl.TestingFramework\nunit-results.xml
/nologo C:\Source\Wholesale\Comp.EventControl.TestingFramework\CodeReboot\CodeReboot\bin\Debug\CodeReboot.dll
C:\Source\Wholesale\Comp.EventControl.TestingFramework\nunit-results.xml

您应该做的第一件事是尝试在本地复制问题。您的测试是否正常运行并干净地退出?在本地运行它们,看看nunit进程是否挂起

如果您的测试在本地运行良好,请尝试找出生成服务器正在哪个测试上暂停,或者它是否正在完成所有测试。如果您的构建脚本不能在本地运行,那么诊断起来就有点困难

回到我们的测试充斥着线程代码的那一天,几乎总是有一个测试(或测试中的代码)在创建线程,然后未能关闭线程,导致NUnit挂起。线程问题令人恼火,因为它们是不确定的,只有在具有更多内核的机器上运行时(如..构建服务器)才可见


如果您有具有线程/外部依赖关系的测试,我会首先尝试禁用这些测试(600个测试需要一分钟才能运行,这一事实表明涉及到外部依赖关系和/或线程,因为单元测试通常需要~1ms才能运行)

您使用的是什么版本的nunit?2.5.7/2.5.8版本中存在一些问题,导致nunit代理在测试结束时挂起。我遇到了这个问题,回到了旧版本的nunit,挂起的问题消失了。在2.5.9的发行说明中,它们显示“602761 nunit代理在测试完成后挂起”已修复。我还没有升级到2.5.9,但这可能会解决您的问题。

我在dos窗口中本地运行了它们。它们运行大约需要一分钟,失败的测试也会有一些例外(它们都是API测试),但它们的执行一直都很好。通过它们正在完成的脚本,日志文件就在那里,我可以查看它的内部,但进程会一直挂起,直到超时。与开发人员核实,据他们所知,没有多线程在进行。不过这是一个好主意,我们将尝试运行测试的子部分,看看它是否愉快地退出…哦,好发现!现在尝试2.5.9,如果失败,我可能会回到我以前使用过的2.4.7。将返回报告。+1000,2.5.9解决了问题,现在运行正常。现在我只需要整理发布服务器的合并文件部分。非常感谢!出于兴趣,您的构建服务器是否使用了与本地开发人员机器相同的nunit版本?在我的例子中,是的。问题可能是通过生成计算机上的CruiseControl.NET服务进程运行nunit,而不是从开发人员计算机上登录的交互式桌面运行nunit。您的某个测试是否打开了新的图形窗口?不,它们都是API命令行测试。