Using VSTest to run unit test cases instead of MSTest

前端 未结 3 517
北荒
北荒 2021-01-31 12:08

I have an x64 platform C# solution(VS2012) on a TFS2010 server. I have attached a unit test project (also x64) to this solution and created a build definition. When I queue the

相关标签:
3条回答
  • 2021-01-31 12:25

    This does not directly answer you question, but it might help. I did a similar thing for TeamCity. I used command-line to call vstest.console.exe and created a .runsettings file.

    I used this Microsoft template for the runsettings file. Note however that on my machine, the path mentioned in the comment in Line 5 is relative to the .runsettings location, not the .sln.

    If you use /logger:trx option of vstest.console.exe, it will generate output in the same format as MSTest (good for result visualization).

    0 讨论(0)
  • 2021-01-31 12:37

    I too have the exact same need for using VSTest.Console.exe instead of MSTest.exe for a TFS2010 build process that compiles a VS2012/.NET 4.5 x64 application, while waiting for the upgrade to TFS2012 to commence.

    The approach I have taken was to edit the build script XAML, deleted the existing workflow for unit tests and replaced it with a customised workflow that builds up the VSTest.Console.exe parameters and then executes VSTest.Console.exe via InvokeProcess. I then ensured that in the Finally block that regardless of test result that we publish the test results and code coverage to TFS using MSTest.exe from a VS2012 installation on the build server.

    Unfortunately I cannot post the XAML in the answer as it exceeds character length, but I do have a text file consisting of the snippet to be replaced in DefaultTemplate.xaml and what to replace it with. The file can be found here. Please note that although this approach works it is a hack.

    Another alternative would be to use NUnit instead of MSTest or VSTest.Console as this support 64-bit binaries. This article explains how to integrate NUnit in a TFS2010 build script, and has links to tools and resources required to make this happen. The only issues with NUnit are code coverage (need yet another tool plus work out how to publish these results to TFS) and MSTest-style integration tests using attributes such as DeploymentItem and properties such as TestContext, which is why where I work we opted with the VSTest.Console.exe approach.

    And from what I have read TFS2012 offers easy integration to VSTest.Console.exe from build scripts, so if you do ever upgrade to TFS2012 the VSTest.Console.exe hack that I have documented may not be required.

    0 讨论(0)
  • 2021-01-31 12:46

    Executing unit tests through VSTest and publishing the test results through MSTest gave me a successful outcome. Given below is the Powershell script:

    #  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
    
    0 讨论(0)
提交回复
热议问题