Upgrading from MSTest to MSTest v2
MSTest v2 is the new version of the MSTest framework that has been shipping with Visual Studio for years. Unlike the previous version, the new version is a set of NuGet packages that do not have a dependency on the version of Visual Studio installed. This article will discuss the process of upgrading from the “old” version to v2.
NOTE: As of Oct 2017, MSTest v2 and package references do not work correctly with TFS builds. The project file traditionally has a .targets file for the test adapter and test framework. The framework .targets file resides in a Visual Studio folder but the adapter’s .targets file comes from the package. Because package references do not create a packages folder in the solution, the .targets file cannot be found. For TFS builds this results in tests not being run because no adapter can be found. Running tests in Visual Studio work correctly.
Updating the Root Project Settings
Before getting started it is assumed that the project has been updated to use package references. While you can use the packages.config
pattern with MSTest v2, this article assumes you have updated to the newer approach.
Open the project file in a text editor (Visual Studio works great) if you have the Project File Tools extension. In the root ProjectGroup
(the one that is not conditionally included) add the following if they are not there yet.
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
Personally I also remove the following elements. I have not had any issues but they may be required by some projects.
- IsCodedUITest
- TestProjectType
Cleaning Up the Project
Add an ImportProject
element to the project file.
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
Go through the project file and remove any references to the *QualityTools*
assemblies in Visual Studio. This includes the following.
Reference
elements to the assemblyChoose
elements that are selecting different versions of the assembly and/or target files- Any references to
.targets
files other than the one added earlier
Update NuGet Packages
Reload the project into Visual Studio. The project will not compile yet so we need to update the packages. Add the following packages from NuGet into the test project.
MSTest.TestFramework
MSTest.TestAdapter
At this point the test project should compile so compile and then run all the tests to ensure they pass. Note that the TestAdapter is what allows Visual Studio to find the projects so ensure that all the tests are discovered properly as well.
You have now upgraded to MSTest v2.