I\'m running a unit test of a dotnet core library using dotnet test. I run the test on my Jenkins slave like this.
dotnet test test/Turbine.Domain.UnitTest -
Thanks Matt and kiml42!
I'm using dotnet core 2.2 with MSpec as my test framework, and don't need the hacky copying, and can use the trx format (https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-test?tabs=netcore21#examples).
The test command I use is: dotnet test --logger "trx;LogFileName=UnitTests.trx"
, which runs tests in each of the test projects, and writes the results to {ProjectFolder}/TestResults/UnitTests.trx
I do have the MSTest plugin installed, which converts from trx to junit format (https://wiki.jenkins.io/display/JENKINS/MSTest+Plugin).
I also link to the test results using a post/always/step block as follows:
post {
always {
step ([$class: 'MSTestPublisher', testResultsFile:"**/TestResults/UnitTests.trx", failOnError: true, keepLongStdio: true])
}
}
I have the following declarative Jenkinsfile pipeline:
pipeline {
agent any
stages {
stage('Restore') {
steps {
sh 'dotnet restore'
}
}
stage('Test') {
steps {
sh 'dotnet test --logger "trx;LogFileName=UnitTests.trx"'
}
}
stage('Build') {
steps {
sh 'dotnet build'
}
}
stage('Stop') {
steps {
sh 'sudo systemctl stop core-app.service'
}
}
stage('Deploy') {
steps {
sh 'rm -rf /var/www/core-app'
sh 'cp -R . /var/www/core-app'
}
}
stage('Start') {
steps {
sh 'sudo systemctl start core-app.service'
}
}
}
post {
always {
step ([$class: 'MSTestPublisher', testResultsFile:"**/TestResults/UnitTests.trx", failOnError: true, keepLongStdio: true])
}
}
tools {
msbuild '.NET Core 2.2.103'
}
environment {
ASPNETCORE_ENVIRONMENT = 'Production'
}
}
You can use the following Pipeline code to run and publish the dotnet core test results:
node {
stage 'Checkout'
cleanWs()
checkout scm
stage 'Build'
bat "\"C:/Program Files/dotnet/dotnet.exe\" restore \"${workspace}/YourProject.sln\""
bat "\"C:/Program Files/dotnet/dotnet.exe\" build \"${workspace}/YourProject.sln\""
stage 'UnitTests'
bat returnStatus: true, script: "\"C:/Program Files/dotnet/dotnet.exe\" test \"${workspace}/YourProject.sln\" --logger \"trx;LogFileName=unit_tests.xml\" --no-build"
step([$class: 'MSTestPublisher', testResultsFile:"**/unit_tests.xml", failOnError: true, keepLongStdio: true])
}
I have uploaded some examples that I made to my GitHub for everyone to use and contribute, feel free to take a look:
https://github.com/avrum/JenkinsFileFor.NETCore
Those pipline jenkinsfile will add this pipline template to your build:
So I'm using xUnit and the trx format which works happily:
Run Tests:
dotnet test test_dir\test_project.csproj --logger "trx;LogFileName=results\unit_tests.xml"
However using this gives me the following issue:
No test discoverer is registered to perform discovery of test cases. Register a test discoverer and try again.
And so copying the xunit runner manually to the bin folder of the test project fixes this (yes this is hacky):
copy packages\xunit.runner.visualstudio.2.2.0\build\_common\*.dll test_dir\bin\Release /Y
I then add a Publish xUnit tests step as shown:
Tests then get reported correctly on the project and build pages.