使用ExitCode 1退出MSTest.exe

时间:2012-12-06 09:24:33

标签: unit-testing msbuild mstest tfsbuild tfs2012

我通过手动调用mstest.exe从msbuild / tfsbuild手动运行测试,但是当我期待0时,它出现意外失败,错误MSB3073和ExitCode 1。

我有这个目标,在$(OutDir)文件夹中搜索所有带有* UnitTests.DLL后缀的DLL。它构建了一个命令行语句,然后执行:

<Target Name="RunUnitTests">
      <CreateItem Include="$(OutDir)\*.UnitTests.dll" 
                  AdditionalMetadata="TestContainerPrefix=/testcontainer:">
          <Output TaskParameter="Include" 
                  ItemName="UnitTestAssemblies" />
      </CreateItem>

      <Exec Timeout="120000" 
            Command="&quot;$(VS110COMNTOOLS)..\IDE\mstest.exe&quot; @(UnitTestAssemblies->'%(TestContainerPrefix)&quot;%(FullPath)&quot;',' ') /testsettings:&quot;$(OutDir)..\..\Sources\mysettings.testsettings&quot;" >
          <Output TaskParameter="ExitCode" PropertyName="ExitCode"/>
      </Exec>

     <Error Condition=" '$(ExitCode)' != '0' And '$(ExitCode)' != '2'" Text="An error [$(ExitCode)] occurred running unit tests." />
     <OnError ExecuteTargets="MarkBuildStepAsFailed" />
</Target>

我在上面添加了一个Timeout属性,因为一些谷歌搜索建议了这个,但它并没有什么区别。

这在buildlog文件中等同如下(包括引号)(我已更改的文件夹名称但在相关处留下空格,但它们看起来不太长):

"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\..\IDE\mstest.exe" /testcontainer:"C:\b\someprojectfolder\anotherfolder\Binaries\..\..\debug\some.unittests.dll" /testsettings:"C:\b\someprojectfolder\anotherfolder\Sources\..\..\mysettings.testsettings"

测试作为构建过程的一部分在构建服务器上运行(即调用上面的目标),因为我可以看到在磁盘上创建了测试结果文件夹。所有单元测试均按预期通过。我也可以在构建日志中看到MSTest.exe控制台输出(例如,开始执行,测试和结果列表,结果文件列出等)

此外,我可以将RDC作为构建服务帐户进入构建服务器,并使用CMD手动运行上面的命令行,并且它可以工作。 (测试结果(* .trx)和文件夹都在那里)。

当我在我的本地开发人员机器上使用CMD手动调用上面的命令行时,它们也可以工作。它会创建测试结果文件和文件夹。

仅供参考我们在本地计算机上使用Visual Studio 2012 Ultimate并安装在构建服务器上。

仅供参考我们正在使用带有升级流程定义的TFS 2012

我感觉它与引用和/或撇号的“解析”/转义有关,还是在路径中使用.. \?

我检查了构建服务器上的事件日志,但没有显示任何错误/信息。我还可以查看其他日志吗?或者我可以定义“查看”实际错误代码的属性?

注意:我知道我可以使用<RunTest>样式的msbuild / tfs构建语法,但我在构建过程中更方便地手动触发这些测试

1 个答案:

答案 0 :(得分:2)

这不是路径中的引号或撇号。我的.testsettings文件连接到远程测试控制器(在另一台运行Windows Server 2008 R2的服务器上)。我正在收集所有数据和诊断(录像机等,网络仿真,事件日志,系统诊断等)

当我检查测试控制器/代理服务器上的事件日志时,它充满了错误,说MSTest必须作为管理权限运行。这就是我正在调查的内容。