After upgrading our unit tests to MSTest v2 we noticed that our tests were no longer discovered by the VSTest task on our build agent.
As a solution, we decided to invoke the test execution ourself.
Therefore I added 2 tasks to our Build definition:
- One command line task to execute dotnet test
- One task to collect and publish the test results
In the command line task I configured the following settings:
- To execute the dotnet command we specify ‘dotnet’ as the Tool
- We also specify the following arguments:
- test: we want to execute the test commando
- --no-restore: the package restore already happened in a previous build step and shouldn’t be re-executed here
- --no-build: assembly compilation already happened in a previous build step and shouldn’t be re-executed here
- --logger:trx: output the test results in the trx format
- A last important setting that we change is the ‘Continue on error’ setting is set to true. If we don’t do this, a failing test will stop any further execution of the other build steps so we never get a chance to publish the test results.
In the publish test result task I configured the following settings:
- Test Result Format: VSTest; Our tests are executed using MSTest and published using the VSTest format.
- Test Results Files: **/*.trx: Search for all trx files found and publish them
- Merge Test Results: True; Merge all test results if multiple files are found.
After configuring these steps, we were able to succesfully run our tests and publish the results.
Remark: We are still using TFS 2017 Update 1, a newer version of the Test task exists where this problem is gone.