What testing frameworks have you used in .NET (xUnit, NUnit, MSTest)?

4 minbeginnertestingxUnitNUnitMSTest

Quick Answer

The three mainstream .NET test frameworks are xUnit, NUnit, and MSTest. xUnit is modern, minimal, and used by the .NET team (uses `[Fact]`/`[Theory]`, fresh instance per test). NUnit is feature-rich and mature (`[Test]`, rich assertions/attributes). MSTest is Microsoft's long-standing framework with tight Visual Studio integration. All integrate with `dotnet test`; xUnit is a common default for new projects.

Detailed Answer

xUnit.net (Modern, Recommended):

  • Most modern and actively maintained
  • Used by .NET Core team
  • No [SetUp]/[TearDown] attributes (uses constructors/IDisposable)
  • Better parallelization support
  • [Fact] for simple tests, [Theory] for parameterized tests
public class CalculatorTests
{
    [Fact]
    public void Add_TwoNumbers_ReturnsSum()
    {
        var calculator = new Calculator();
        var result = calculator.Add(2, 3);
        Assert.Equal(5, result);
    }
    
    [Theory]
    [InlineData(2, 3, 5)]
    [InlineData(0, 0, 0)]
    [InlineData(-1, 1, 0)]
    public void Add_VariousInputs_ReturnsCorrectSum(int a, int b, int expected)
    {
        var calculator = new Calculator();
        Assert.Equal(expected, calculator.Add(a, b));
    }
}

NUnit (Mature, Feature-Rich):

  • Oldest and most feature-rich
  • Rich assertion library
  • Supports parallel test execution
  • [Test], [TestCase] attributes
[TestFixture]
public class CalculatorTests
{
    [Test]
    public void Add_TwoNumbers_ReturnsSum()
    {
        var calculator = new Calculator();
        var result = calculator.Add(2, 3);
        Assert.That(result, Is.EqualTo(5));
    }
    
    [TestCase(2, 3, 5)]
    [TestCase(0, 0, 0)]
    public void Add_VariousInputs_ReturnsCorrectSum(int a, int b, int expected)
    {
        var calculator = new Calculator();
        Assert.That(calculator.Add(a, b), Is.EqualTo(expected));
    }
}

MSTest (Microsoft's Framework):

  • Built into Visual Studio
  • Good integration with Microsoft tools
  • Less popular in community
  • [TestMethod], [DataRow] attributes
[TestClass]
public class CalculatorTests
{
    [TestMethod]
    public void Add_TwoNumbers_ReturnsSum()
    {
        var calculator = new Calculator();
        var result = calculator.Add(2, 3);
        Assert.AreEqual(5, result);
    }
}

Personal Preference: xUnit for new projects due to modern design and .NET team support.