-
Notifications
You must be signed in to change notification settings - Fork 99
Find VSTest
VSTest is a good test harness when your solution uses multiple test frameworks that support VSTest discovery and execution, or when you want to have consistent code coverage and test results (when supported by test frameworks like xUnit and NUnit).
Starting with version 1.0.40, you can easily find the root path of the latest instance of VS that contains the tools. Note that we generally recommend using package IDs with "Workload" or "Component" in the name, but in this case both "Microsoft.VisualStudio.Workload.ManagedDesktop" and "Microsoft.VisualStudio.Workload.Web" install the requires test tools and vswhere does not support OR selection.
**Note: ** Starting with version 2.3 you can use the new switch parameter
-requiresAny
with both of the workloads below, such that command lines below would be replaced with the following - using supported and consistent workload IDs:
vswhere -latest -products * -requires Microsoft.VisualStudio.Workload.ManagedDesktop Microsoft.VisualStudio.Workload.ManagedDesktopBuildTools Microsoft.VisualStudio.Workload.Web Microsoft.VisualStudio.Workload.WebBuildTools -requiresAny -property installationPath
The following examples use the latest release. For examples that work with older releases, please view the history of this page.
You can find the root of VS similar to finding MSBuild.
Note below that the examples are written as if in a batch script, which requires escaping "%" with another "%" which is why you see "%%i". If you were typing this in the command prompt you would use only one "%" like "%i".
@echo off
for /f "usebackq" %%i in (`vswhere -latest -products * -requires Microsoft.VisualStudio.Workload.ManagedDesktop Microsoft.VisualStudio.Workload.Web -requiresAny -property installationPath`) do (
set InstallDir=%%i
)
if exist "%InstallDir%\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" (
call "%InstallDir%\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" %*
)
You can do something similar in PowerShell but without having to parse the output yourself using the for
command.
function Invoke-VSTest {
$ErrorActionPreference = 'Stop'
$path = vswhere -latest -products * -requires Microsoft.VisualStudio.Workload.ManagedDesktop Microsoft.VisualStudio.Workload.Web -requiresAny -property installationPath
$path = join-path $path 'Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe'
if (test-path $path) {
& $path $args
}
}
This example is wrapped in a nice little function that will pass arguments through to vstest.console.exe.
Copyright (C) Microsoft Corporation. All rights reserved. Licensed under the MIT license. See LICENSE.txt in the project root for license information.