4

我有一个使用 .NET 4.5 框架的 Visual Studio 2012 解决方案。我们开发系统的其余部分是 TFS2010。最近我们的一些单元测试只在构建服务器上失败了。经过几轮调试后,我能够确定测试失败的原因很可能是由于构建服务器上使用的 MSTest 版本。在我的本地机器上从 VS2012 运行以及在实际构建服务器上从 VS2012 运行时,有问题的测试通过了。

我已经按照以下文章中描述的步骤(我没有找到任何与 VS2012 和 TFS2010 直接相关的有用文章)但没有成功:从 TFS2008 Team BuildVS2010、TFS 2008 和单元测试运行 VS2010 UnitTests 项目

在构建服务器上,我现在拥有以下内容:

  • 已安装 VS2010 Ultimate SP1
  • 已安装 VS2012 更新 3
  • 已安装 .NET 4.5 框架 SDK
  • 更改了“C:\Program Files (86)\MSBuild\Microsoft\VisualStudio\TeamBuild\”和“C:\Program Files\MSBuild\Microsoft\VisualStudio\TeamBuild\”中的 Microsoft.TeamFoundation.Build.targets 文件,因此 AssemblyFile 属性TestToolsTask 构建任务指向“C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\Microsoft.TeamFoundation.Build.ProcessComponents.dll”

我有 2 个构建定义,我一直在测试:

  1. 在第一个构建定义中,我将“运行 MS 测试”活动的 ToolPath 留为空白,因此它使用“C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE”
  2. 在另一个构建定义中,我已将“运行 MS 测试”活动 ToolPath 参数更改为“C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE”

两个构建定义似乎都在正确构建,并且正在使用以下 MSBuild.exe:C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

第一个构建定义运行 VS2010 版本的 MStest 有任何错误,但大约有 5 个错误。2030 年测试失败。这些测试在 Visual Studaio 2012 中运行时不会失败。命令行的一个示例是(实际路径和服务器名称已删除):

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe 
/nologo /usestderr /searchpathroot:"d:\Builds\xxxxx\Binaries" 
/resultsfileroot:"d:\Builds\xxxxx\TestResults" /testcontainer:"d:\Builds\xxxxx.dll" 
/testcontainer:"d:\Builds\xxxxx.dll" /publish:"http://xxxxx 
/publishbuild:"vstfs:///Build/Build/xxxxx" /teamproject:"xxxxx" /platform:"x86" /flavor:"Debug"

运行第二个构建定义时,MSTest 无法运行,输出如下。如果我从构建服务器上的命令行运行此命令,而没有导致 Invalid switch 错误的开关,则 MSTest 运行并且有问题的测试通过:

The MSTestActivity was invoked without a value for Platform or Flavor. The values x86 and Debug were used.

    C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\MSTest.exe 
    /nologo /usestderr /searchpathroot:"d:\Builds\xxxxx\Binaries" 
    /resultsfileroot:"d:\Builds\xxxxx\TestResults" /testcontainer:"d:\Builds\xxxxx.dll" 
    /publish:"http://xxxxx" /publishbuild:"vstfs:///Build/Build/xxxxx" /teamproject:"xxxxx" 
    /platform:"x86" /flavor:"Debug" 
    Invalid switch "/publish".
    Invalid switch "/publishbuild".
    Invalid switch "/teamproject".
    Invalid switch "/platform".
    Invalid switch "/flavor".
    For switch syntax, type "MSTest /help"

我已经对这些构建进行了很多运行,但我无法解决问题。还有什么我遗漏的需要在构建服务器或构建定义中完成的吗?

关于失败的实际测试,它们的共同点是比较列表中的对象,但如前所述,它们在从 VS2012 中运行时通过。

4

1 回答 1

4

在构建服务器上安装 VS2012 Ultimate 导致运行 MSTest 时的 Invalid switch 错误消失并且 MSTest 可以成功运行。我之前安装了 VS2012 Professional 和 VS2012 Team Explorer,但这些版本“显然”(在大量调试运行后发现!!)不包含所需的 MSTest 版本。有关 MSTest 命令行选项的信息没有提到这一点(MSDN Command-Line options for publishing tests),只提到必须安装 Team Explorer。

于 2013-09-03T11:00:53.643 回答