xUnit / NUnit para C# (.NET): guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é esta biblioteca e para que serve

\n\n

xUnit e NUnit são as duas bibliotecas mais populares para testes unitários (unit testing) no ecossistema .NET (C#, F#, VB.NET). Elas permitem que desenvolvedores escrevam testes automatizados que verificam a corretude de módulos individuais do programa (classes, métodos, funções).

\n\n

Para que serve?

\n
    \n
  • Detecção de erros em estágios iniciais: Os testes são executados após cada alteração no código, permitindo identificar imediatamente regressões (quando um novo código quebra funcionalidades antigas).
  • \n
  • Refatoração sem medo: Você pode reescrever o código com confiança se tiver certeza de que os testes o cobrem. Se os testes passarem, tudo funciona como antes.
  • \n
  • Documentação em ação: Os testes mostram exatamente como um determinado método deve ser usado, quais parâmetros ele aceita e o que retorna.
  • \n
  • Integração CI/CD: Os testes são executados automaticamente em servidores de build (GitHub Actions, Azure DevOps, Jenkins) antes da implantação.
  • \n
\n\n

Diferença entre xUnit e NUnit:

\n
    \n
  • NUnit — biblioteca mais antiga (port do Java JUnit), usa atributos [Test], [SetUp], [TearDown]. Possui um rico conjunto de atributos para parametrização.
  • \n
  • xUnit — biblioteca mais moderna, criada pelo autor do NUnit. Usa o atributo [Fact] para testes comuns e [Theory] para testes parametrizados. Diferencia-se por uma abordagem mais rigorosa ao isolamento de testes (cada teste é uma nova instância da classe).
  • \n
\n\n

Neste artigo, abordaremos ambas as bibliotecas, mas o foco principal será no xUnit, pois é a recomendada pela Microsoft para novos projetos.

\n\n

Instalação

\n\n

A instalação é feita através do gerenciador de pacotes NuGet. Você pode usar o Console do Gerenciador de Pacotes (Package Manager Console) ou a CLI do .NET.

\n\n

Instalação do xUnit

\n
// Via .NET CLI\ndotnet add package xunit\ndotnet add package xunit.runner.visualstudio\n\n// Via Package Manager Console\nInstall-Package xunit\nInstall-Package xunit.runner.visualstudio
\n\n

Instalação do NUnit

\n
// Via .NET CLI\ndotnet add package NUnit\ndotnet add package NUnit3TestAdapter\n\n// Via Package Manager Console\nInstall-Package NUnit\nInstall-Package NUnit3TestAdapter
\n\n

Importante: Para executar os testes no Visual Studio ou Rider, também é necessário instalar um adaptador do executor de testes (por exemplo, xunit.runner.visualstudio ou NUnit3TestAdapter).

\n\n

Início rápido com exemplo de código

\n\n

Suponha que temos uma classe simples Calculator com o método Add. Vamos escrever testes para ela em xUnit e NUnit.

\n\n

Classe a ser testada (Calculator.cs)

\n
public class Calculator\n{\n    public int Add(int a, int b)\n    {\n        return a + b;\n    }\n\n    public int Divide(int a, int b)\n    {\n        if (b == 0)\n            throw new DivideByZeroException("Não é possível dividir por zero!");\n        return a / b;\n    }\n}
\n\n

Teste em xUnit (CalculatorTests.cs)

\n
using Xunit;\n\npublic class CalculatorTests\n{\n    [Fact]\n    public void Add_ShouldReturnSum_WhenTwoPositiveNumbers()\n    {\n        // Arrange (Preparação)\n        var calculator = new Calculator();\n        int a = 5;\n        int b = 3;\n\n        // Act (Ação)\n        int result = calculator.Add(a, b);\n\n        // Assert (Verificação)\n        Assert.Equal(8, result);\n    }\n\n    [Fact]\n    public void Divide_ShouldThrowException_WhenDivideByZero()\n    {\n        var calculator = new Calculator();\n\n        Assert.Throws<DivideByZeroException>(() => calculator.Divide(10, 0));\n    }\n}
\n\n

Teste em NUnit (CalculatorTest

Recommendations