4

我有一個使用.NET 4.5框架的Visual Studio 2012解決方案。我們的其他開發系統是TFS2010。最近我們的一些單元測試只在構建服務器上失敗。經過幾輪調試後,我可以確定失敗測試的原因很可能是由於構建服務器上使用的MSTest版本。有問題的測試通過從本地機器上的VS2012運行時,以及從VS2012在實際構建服務器上運行。從TFS2010運行VS2012單元測試團隊建設

我按照下面的文章中描述的步驟(我還沒有找到VS2012和TFS2010直接相關的任何有用的文章)沒有成功:Running VS2010 UnitTests project from TFS2008 Team BuildVS2010, TFS 2008 and Unit Tests

在構建服務器我現在有以下幾點:

  • VS2010 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)的\微軟的Visual Studio 11.0 \ Common7 \ IDE \ PrivateAssemblies \ Microsoft.TeamFoundation.Build.ProcessComponents.dll」

我有2編譯我已與測試的定義:

  1. 在第一個構建定義我已經離開了「運行MS測試」活動的空白的刀具路徑所以它然後使用「C:\ Program Files文件(x86)的\微軟的Visual Studio 1 0.0 \ Common7 \ IDE」
  2. 在其他構建定義我已經改變了 「運行MS測試」 活動的刀具路徑參數設置爲 「C:\ Program Files文件(x86)的\微軟的Visual Studio 11.0 \ Common7 \ IDE」

雙方建立的定義似乎是正確的建設和使用以下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內運行。

回答

4

在生成服務器上安裝VS2012 Ultimate導致無效開關錯誤,當運行MSTest消失和MSTest可以成功運行。我之前安裝過VS2012 Professional和VS2012團隊資源管理器,但這些版本「很明顯」(經過大量調試運行後發現!!)不包含所需版本的MSTest。有關MSTest命令行選項的信息未提及此(MSDN Command-Line options for publishing tests),只提到必須安裝Team Explorer。