从TFS2010 Team Build运行VS2012单元测试

时间:2013-08-29 12:23:42

标签: visual-studio-2010 visual-studio-2012 msbuild tfs2010 mstest

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

我已按照以下文章中描述的步骤(我没有找到与VS2012和TFS2010直接相关的任何有用文章)但没有成功:Running VS2010 UnitTests project from TFS2008 Team BuildVS2010, TFS 2008 and Unit Tests

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

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

我有两个我一直在测试的构建定义:

  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”
  3. 两个构建定义似乎都正确构建并使用以下MSBuild.exe: C:\的Windows \ Microsoft.NET \框架\ 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无法使用下面的输出运行。如果我从构建服务器上的命令行运行此命令而没有导致无效开关错误的开关,则运行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内运行时会通过。

1 个答案:

答案 0 :(得分:4)

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