Pular para o conteúdo
.NETxUnit e estrutura de testes
Módulo 02Fundamentos de Aplicação

xUnit e estrutura de testes

intermediario 28 min de leitura·Atualizado · .NET 9
Resumo

xUnit é o framework de testes mais usado no .NET moderno. Um teste é um método [Fact] que segue o padrão AAA (Arrange, Act, Assert). A CLI executa tudo com dotnet test.

1. Objetivos de Aprendizagem#

  • Criar um projeto de teste com xUnit.
  • Escrever testes com [Fact] no padrão AAA.
  • Executar testes com dotnet test.

2. Pré-requisitos#

  • Solutions e referências (Módulo 02).

3. Conceito#

Um teste automatizado verifica, por código, que uma unidade se comporta como esperado. Benefícios: pega regressões cedo, documenta o comportamento e dá confiança para refatorar.

O padrão AAA:

  • Arrange: prepara os dados e o objeto sob teste.
  • Act: executa a ação testada.
  • Assert: verifica o resultado.

[Fact] marca um teste sem parâmetros. O porquê de testar unidades: falhas ficam localizadas e o feedback é rápido.

4. Mão na Massa#

4.1. Setup#

Shell
dotnet new xunit -n Catalog.Tests

Referencie o projeto sob teste:

Shell
dotnet add Catalog.Tests reference Catalog.Domain

4.2. Implementação Passo a Passo#

  1. Código sob teste (no projeto de produção):
C#
public class CalculadoraPreco
{
    public decimal ComDesconto(decimal preco, decimal percentual)
    {
        if (percentual is < 0 or > 1)
            throw new ArgumentOutOfRangeException(nameof(percentual));
        return preco * (1 - percentual);
    }
}
  1. Teste com [Fact] (padrão AAA):
C#
using Xunit;

public class CalculadoraPrecoTests
{
    [Fact]
    public void ComDesconto_AplicaPercentualCorretamente()
    {
        // Arrange
        var calc = new CalculadoraPreco();

        // Act
        var resultado = calc.ComDesconto(100m, 0.1m);

        // Assert
        Assert.Equal(90m, resultado);
    }
}

4.3. Executando#

Shell
dotnet test

5. Exemplo Completo#

O teste ComDesconto_AplicaPercentualCorretamente segue AAA e falharia imediatamente se alguém quebrasse a lógica de desconto — uma rede de segurança para refatorações futuras.

6. Boas Práticas e Armadilhas#

FaçaEvite
Um comportamento por testeTestes que verificam dez coisas ao mesmo tempo
Nomes descritivos (Método_Cenário_Esperado)Nomes como Teste1
Manter testes rápidos e independentesTestes que dependem de ordem ou de estado global
Nota

xUnit cria uma nova instância da classe de teste para cada [Fact], garantindo isolamento entre testes. Use o construtor para o "arrange" comum.

7. Segurança e Produção#

  • Testes rápidos e determinísticos rodam em cada commit no CI, barrando regressões antes do deploy — parte essencial de um pipeline confiável.

8. Exercícios#

  • Fácil: escreva um teste que verifica uma soma.
  • Médio: teste que um método lança exceção com Assert.Throws.
  • Desafio: crie a CalculadoraPreco, cubra o caminho feliz e o de erro, e rode dotnet test.

9. Resumo#

xUnit estrutura testes em métodos [Fact] seguindo AAA (Arrange, Act, Assert). dotnet test executa tudo. Cada [Fact] roda numa nova instância, garantindo isolamento.

10. Próximos Passos#

A seguir, asserções mais ricas e testes parametrizados com [Theory].

11. Referências#

15-01 — xUnit e estrutura de testes | Curso ASP.NET Core