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.