使用VSTest运行单元测试用例,而不是MSTest的(Using VSTest to run un

2019-08-17 01:54发布

我有一个TFS2010服务器在x64平台的C#解决方案(VS2012)。 我附上一个单元测试项目(也x64)的该解决方案,并创建了一个构建定义。 当我排队的构建,它成功,但单元测试用例将不会被执行。 这是因为MSTest的是一个32位应用程序。 所以,我决定自定义默认的生成过程模板(DefaultTemplate.xaml)来调用,而不是MSTest的VSTest(VSTest.console.exe)。 这是相当复杂,我无法构建活动添加到工具箱VSTest。

有没有人做过这种定制的? 我也曾考虑其他方法,如配置.runsettings文件。 我们是否可以在.runsettings添加提交VSTest适配器接口?

Answer 1:

通过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


Answer 2:

我也有使用VSTest.Console.exe代替MSTest.exe为编译一个VS2012 / .NET 4.5的x64应用程序TFS2010构建过程完全一样的需求,同时等待升级到TFS2012开始。

我采取的方法是编辑构建脚本XAML,删除了单元测试的现有的工作流程,并与定制工作流程,建立了VSTest.Console.exe参数,然后通过InvokeProcess执行VSTest.Console.exe取而代之。 然后我保证finally块,不管我们发布使用MSTest.exe从构建服务器上的VS2012安装测试结果和代码覆盖率TFS测试结果。

不幸的是,因为它超出字符长度我不能发布XAML的答案,但我确实有由摘录的文本文件中DefaultTemplate.xaml被取代,如何处理替换它。 该文件可以找到这里 。 请注意,尽管这种方式是一个黑客。

另一替代方案将是使用NUnit代替MSTest的或VSTest.Console作为这种支持64位二进制文​​件。 该文章介绍了如何NUnit的在TFS2010构建脚本集成,并提供前往来实现这一目标所需的工具和资源。 与NUnit的唯一的问题是代码覆盖率(需要另一种工具,加上工作如何发布这些结果TFS)和MSTest的风格的使用属性,如DeploymentItem和如的TestContext,这就是为什么我工作的地方,我们有选择性集成测试该VSTest.Console.exe方法。

从我已阅读TFS2012提供方便,从构建脚本集成VSTest.Console.exe,所以如果你曾经升级到TFS2012的VSTest.Console.exe劈,我已经证明可能不需要。



Answer 3:

这并不直接回答你的问题,但它可能会有所帮助。 我做了类似的事情的TeamCity。 我使用的命令行来调用vstest.console.exe并创建了一个.runsettings文件。

我用这个微软模板为runsettings文件。 但是请注意,我的机器上,在5号线的评论中提到的路径是相对于.runsettings位置,而不是的.sln。

如果使用/记录器:vstest.console.exe的TRX选项,它会产生相同的格式为MSTest的(好结果的可视化)输出。



文章来源: Using VSTest to run unit test cases instead of MSTest