.NET unit test frameworks overview

In .NET we have 3 dominant unit test frameworks:

  • MS Test

  • NUnit

  • xUnit

First one comes with Visual Studio, two other requires additional components installation.

Unit Testing Frameworks Comparison

NUnit

xUnit.net

MSTest

Introduction

actually ported from a Java testing framework named “JUnit”. It’s a mature framework with a long history started from JUnit since 1998.

relatively new testing framework, written by original inventor of NUnit v2.

The evolution of Microsoft's Test Framework

Source Code

Supported Platforms

– .NET Framework 2.0+ – .NET Standard 1.6+ – .NET Core

– .NET 4.5.2 + – .NET Core 2.1+

– .NET 4.5.0+ – .NET Core 1.0+ (Universal Windows Apps 10+, DNX Core 5+) – ASP.NET Core 1.0+

.Net Core Support

YES

YES

YES

IDE Tools Support

Visual Studio, Visual Studio Code, Resharper

Visual Studio, Visual Studio Code, Resharper

Visual Studio, Visual Studio Code, Resharper

CI Tools Support

TeamCity, VSTS, MSBuild, CuiseControl.net, Bamboo, Jenkins

TeamCity, VSTS, MSBuild, CuiseControl.net, Bamboo, Jenkins

TeamCity, VSTS, MSBuild, CuiseControl.net, Bamboo, Jenkins

Parallel Execution

YES

YES

YES

Execution Isolation Level

Per test class

Per test method

Per test class

Extensible Test Attributes

NO (Test and TestCase attributes are sealed)

YES (Theory and Fact attributes are extensible)

No

Documentation

Highly documented

Not too much

Documented Well

Unit Testing Implementation Comparison

xUnit Test

MS Test

NUnit Test

Class

No

[TestClass]

[TestFixture]

Single Test Case

[Fact]

[TestMethod]

[Test]

Multi-Data

[Theory]

[InlineData]

[DataTestMethod]

[DataRow]

[TestCase]

Repeat Initialization for each Test

Ctor, IDisposable

[TestInitialize]

[TestCleanup]

[SetUp]

[TearDown]

One Time initialization for all tests in one class.

[MemberData]

Or

[ClassData]

Method Member (may Property Member)

[ClassInitialize]

[ClassCleanup]

[OneTimeSetUp]

[OneTimeTearDown]

One Time initialization for all tests in one assembly

[MemberData] Or [ClassData] Property Member

[TestClass] + [AssemblyInitialize] [AssemblyCleanup]

Dedicated class with [SetUpFixture] + [OneTimeSetUp] [OneTimeTearDown]

Last updated