The switch from the project.json format to the new csproj based format for .NET Core and .NET Standard projects also changed the API for test adapters. Because of this, NUnit’s dotnet-test-nunit adapter stopped working and we had to update our existing Visual Studio test adapter to support .NET Core. Last night I released the first alpha release of the test adapter to NuGet enabling testing of .NET Core and .NET Standard projects using Visual Studio 2017, Visual Studio Code, TFS Build, and, the dotnet test CLI command.
Creating a Test Project
The following instructions are for Visual Studio, but the principles apply to all development environments.
In the solution that you want to test, Add | New Project… and add a Visual C# | .NET Core | Class Library (.NET Core).
I am testing a .NET Standard library, but I am using a .NET Core class library for testing. Testing requires a platform to test on, so your test assembly must target a specific platform. I selected .NET Core, but I could also target .NET 4.5 or even multi-target the test assembly. Be aware that multi-targeted test projects are barely supported by Visual Studio and your results may vary. Hopefully we will see improvements in the tooling soon.
Adding NuGet References
First, you will want to add a project reference to the project you are testing, then add NuGet references to the test framework NUnit 3.6.1, to the test runner NUnit3TestAdapter 3.8.0-alpha1 and to the test SDK Microsoft.NET.Test.Sdk 15.0.0. Add the references either using the Manage NuGet Packages… user interface, or by editing the project file.
Your csproj file should end up looking similar to this. Notice how much cleaner the new format is.
From here, write your unit tests as you would for any project.
Running Tests in Visual Studio
Running tests in Visual Studio hasn’t changed. See my previous post on running NUnit tests in Visual Studio if you have questions.
A few things to note,
- If you multi-target your tests, only one target will run in Visual Studio, I believe the first
- Code Coverage is not supported for .NET Core yet, that will be available in a future update to Visual Studio
- Live Unit Testing is also not available for .NET Core yet
Running Tests from the Command Line
Adding the NUnit 3 Test Adapter to your project will also allow you to use the dotnet test CLI. Here is an example run with the unit tests targeting both .NET 4.5 and .NET Core 1.1.
C:\src\Spikes\NetStandardLibrary Î» dotnet test .\NetStandardLibrary.Tests\NetStandardLibrary.Tests.csproj Build started, please wait... Build completed. Test run for C:\src\Spikes\NetStandardLibrary\NetStandardLibrary.Tests\bin\Debug\net45\NetStandardLibrary.Tests.dll(.NETFramework,Version=v4.5) Microsoft (R) Test Execution Command Line Tool Version 22.214.171.124 Copyright (c) Microsoft Corporation. All rights reserved. Starting test execution, please wait... NUnit Adapter 126.96.36.199: Test execution started Running all tests in C:\src\Spikes\NetStandardLibrary\NetStandardLibrary.Tests\bin\Debug\net45\NetStandardLibrary.Tests.dll NUnit3TestExecutor converted 18 of 18 NUnit test cases NUnit Adapter 188.8.131.52: Test execution complete Total tests: 18. Passed: 18. Failed: 0. Skipped: 0. Test Run Successful. Test execution time: 0.9096 Seconds Test run for C:\src\Spikes\NetStandardLibrary\NetStandardLibrary.Tests\bin\Debug\netcoreapp1.1\NetStandardLibrary.Tests.dll(.NETCoreApp,Version=v1.1) Microsoft (R) Test Execution Command Line Tool Version 184.108.40.206 Copyright (c) Microsoft Corporation. All rights reserved. Starting test execution, please wait... NUnit Adapter 220.127.116.11: Test execution started Running all tests in C:\src\Spikes\NetStandardLibrary\NetStandardLibrary.Tests\bin\Debug\netcoreapp1.1\NetStandardLibrary.Tests.dll NUnit3TestExecutor converted 18 of 18 NUnit test cases NUnit Adapter 18.104.22.168: Test execution complete Total tests: 18. Passed: 18. Failed: 0. Skipped: 0. Test Run Successful. Test execution time: 1.1661 Seconds
The tests run for both targets and that you get the output from the dotnet test command, not the normal coloured NUnit output that you would get from the NUnit Console. Hopefully we will be releasing an updated console runner in the near future.