簡體   English   中英

使用VSTest運行單元測試用例而不是MSTest

[英]Using VSTest to run unit test cases instead of MSTest

我在TFS2010服務器上有一個x64平台C#解決方案(VS2012)。 我已將一個單元測試項目(也是x64)附加到此解決方案並創建了一個構建定義。 當我對構建進行排隊時,它會成功,但不會執行單元測試用例。 這是因為MSTest是一個32位應用程序。 因此,我決定自定義默認構建過程模板(DefaultTemplate.xaml)以調用VSTest(VSTest.console.exe)而不是MSTest。 這非常復雜,我無法為VSTest的工具箱添加構建活動。

有沒有人做過這種定制? 我還考慮過配置.runsettings文件等其他方法。 我們是否有可以添加到.runsettings文件中的VSTest適配器接口?

通過VSTest執行單元測試並通過MSTest發布測試結果給了我一個成功的結果。 以下是Powershell腳本:

#  Get the UnitTest Binaries
$files = Get-ChildItem $TestAssembliesDir\*est*.dll

#  VSTest.console.exe path
$VSTestPath = 'C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe'

#  MSTest path
$MSTestpath = "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\mstest.exe"
#  Loop through the test assemblies and add them to the VSTestFiles

$VSTestFiles = ''  
foreach($file in $files)  
{   
    $VSTestFiles += "`"$file`"" 
    $VSTestFiles += " "
} 

#  Run the UnitTests using VSTest 
&$VSTestPath  $vstestplatform "/Framework:Framework45" "/InIsolation" $VSTestFiles "/logger:trx"

#  Get TRX files
$TrxFilesList = Get-ChildItem $TestResDir\*.trx
$TrxFiles = ''  
$loop = 1
foreach($file in $TrxFilesList)  
{   
    $TrxFiles = "$file" 
    # copy the trx file into a space-less named trx
    $newTrxFileName = "$BuildUri" + "_" + "$loop" + ".trx"

    copy-item $TrxFiles -destination $TestResDir\$newTrxFileName

    $loop = $loop + 1
    $newTrxFile += "$TestResDir\$newTrxFileName"
    $newTrxFile += " "
} 

#  specify MSTest arguments 
$mspubl = "/publish:"+$TeamProjColUri
$msteampr = "/teamproject:" + $TeamProj
$mspublbuild = "/publishbuild:" +$BuildUri
$mspubresfile = "/publishresultsfile:" +"`"$newTrxFile`""
#Publish test results through MSTest
&$MSTestpath  $mstestplatform $flavor $mspubl $msteampr $mspublbuild $mspubresfile

我也有同樣需要使用VSTest.Console.exe而不是MSTest.exe來編譯VS2012 / .NET 4.5 x64應用程序的TFS2010構建過程,同時等待升級到TFS2012開始。

我采用的方法是編輯構建腳本XAML,刪除單元測試的現有工作流,並將其替換為構建VSTest.Console.exe參數的自定義工作流,然后通過InvokeProcess執行VSTest.Console.exe。 然后我確保在Finally塊中,無論測試結果如何,我們都使用構建服務器上的VS2012安裝中的MSTest.exe將測試結果和代碼覆蓋率發布到TFS。

不幸的是我不能在答案中發布XAML,因為它超過了字符長度,但是我確實有一個文本文件,包含要在DefaultTemplate.xaml中替換的片段以及要替換它的內容。 該文件可在此處找到。 請注意,雖然這種方法有效,但它是一種黑客行為。

另一種替代方法是使用NUnit而不是MSTest或VSTest.Console作為支持64位二進制文​​件。 本文將介紹如何將NUnit集成到TFS2010構建腳本中,並提供實現此目的所需的工具和資源的鏈接。 NUnit的唯一問題是代碼覆蓋(需要另一個工具以及如何將這些結果發布到TFS)以及使用諸如DeploymentItem之類的屬性和TestContext等屬性的MSTest樣式集成測試,這就是為什么我工作的地方我們選擇了VSTest.Console.exe方法。

從我讀到的內容來看,TFS2012可以從構建腳本輕松集成到VSTest.Console.exe,因此如果你曾經升級到TFS2012,可能不需要我記錄的VSTest.Console.exe hack。

這不直接回答你的問題,但它可能有所幫助。 我為TeamCity做了類似的事情。 我使用命令行來調用vstest.console.exe並創建了一個.runsettings文件。

我將此Microsoft模板用於runsettings文件。 但請注意,在我的機器上,第5行注釋中提到的路徑是相對於.runsettings位置而不是.sln。

如果使用vstest.console.exe的/ logger:trx選項,它將以與MSTest相同的格式生成輸出(適用於結果可視化)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM