我在TFS2010服务器上有一个x64平台C解决方案(VS2012)。我已将一个单元测试项目(也是x64)附加到此解决方案,并创建了一个生成定义。当我对构建进行排队时,它会成功,但是单元测试用例不会被执行。这是因为mstest是一个32位应用程序。因此,我决定自定义默认的生成过程模板(default template.xaml)来调用vstest(vstest.console.exe)而不是mstest。这非常复杂,我无法将生成活动添加到vstest的工具箱中。
有人做过这种定制吗?我还考虑了其他方法,如配置.runsettings文件。我们有一个VSTEST适配器接口,可以在.RunSuffice文件中添加吗?

最佳答案

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

10-08 06:16