我通过手动调用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=""$(VS110COMNTOOLS)..\IDE\mstest.exe" @(UnitTestAssemblies->'%(TestContainerPrefix)"%(FullPath)"',' ') /testsettings:"$(OutDir)..\..\Sources\mysettings.testsettings"" >
<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构建语法,但我在构建过程中更方便地手动触发这些测试
答案 0 :(得分:2)
这不是路径中的引号或撇号。我的.testsettings文件连接到远程测试控制器(在另一台运行Windows Server 2008 R2的服务器上)。我正在收集所有数据和诊断(录像机等,网络仿真,事件日志,系统诊断等)
当我检查测试控制器/代理服务器上的事件日志时,它充满了错误,说MSTest必须作为管理权限运行。这就是我正在调查的内容。