If you are managing an open source library for the community like I do, the introduction of .NET Core/.NET Standard is a bless and curse. Special care must be taken so as to make unit testing platform complete and issue free. Here I share some tips I learn from the process.
Like I did in #SNMP Library to use multiple target frameworks (
net452), the associated unit testing project can be made to utilize multiple target frameworks (
net452), so that
dotnet test command can execute the test cases for both .NET Core 1.0 and .NET Framework 4.5.2,
1 2 3 4 <PropertyGroup> <OutputType Condition="'$(TargetFramework)'!='net452'">Exe</OutputType> <TargetFrameworks>netcoreapp1.0;net452</TargetFrameworks> </PropertyGroup>
You must make sure to use the extra
Condition to avoid a compilation error,
1 CSC : error CS5001: Program does not contain a static 'Main' method suitable for an entry point
If you are an xUnit.net user like I am, you probably should notice the differences of 2.2.0 and 2.3.0 (in beta, 2.3.0-beta5-build3769) right now and be confused.
So its 2.2.0 is the very first major release with full .NET Core tooling integration, so that you can use
dotnet test command to run xUnit.net based test projects. Please verify that you are using all related NuGet packages with version number “2.2.0”.
Its 2.3.0 is currently in beta, which introduces the new
dotnet xunit command, which provides much more features than
dotnet test. However, as it is still under development, avoid using it for your projects if you can. I personally experienced various issues when testing out this release with #SNMP Library, where it significantly increases the probability of testing failures (many test cases are socket based).
Even for 2.2.0 release, the probability of testing failures can be observable, which forces me to run unit testing and integration testing separately. This applies to #SNMP Library and might also apply to your projects.
Just notice that if you use multiple target frameworks, then the xUnit.net VS runner (2.2.0) might not be able to detect the test cases. A workaround is to temporarily set net452 only,
1 2 - <TargetFrameworks>netcoreapp1.0;net452</TargetFrameworks> + <TargetFrameworks>net452</TargetFrameworks>
Remember not to check in this workaround to the source control system.
You might refer to #SNMP Library code base to learn more about the setup.