📊 Capítulo 16: Testes com xUnit & FluentAssertions
Especialização em Sistemas com C#
🗺️ O Padrão AAA (Arrange, Act, Assert) e FluentAssertions
flowchart TD
TEST["[Fact] public void Sacar_ComSaldoSuficiente_DeveAtualizarSaldo()"]
--> ARRANGE["// Arrange (Preparação do cenário de teste)\nvar conta = new ContaBancaria(saldoInicial: 500m);"]
ARRANGE --> ACT["// Act (Execução da operação de domínio)\nconta.Sacar(200m);"]
ACT --> ASSERT["// Assert com FluentAssertions (Expressivo e legível!)\nconta.Saldo.Should().Be(300m);\nconta.Movimentacoes.Should().HaveCount(1).And.Contain(m => m.Valor == 200m); ⚡"]
style TEST fill:#ede7f6,stroke:#512da8,stroke-width:2px
style ARRANGE fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
style ACT fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style ASSERT fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
🎯 Slide 1: [Fact] vs [Theory] no xUnit
-
[Fact]: Teste determinístico invariável sem parâmetros. [Theory]com[InlineData]: Executa o mesmo teste parametrizado com múltiplos cenários de entrada:
[Theory]
[InlineData(100, 10, 90)]
[InlineData(50, 50, 0)]
public void TestarSubtracao(decimal saldo, decimal saque, decimal esperado)
{
var conta = new Conta(saldo);
conta.Sacar(saque);
conta.Saldo.Should().Be(esperado);
}
🎯 Slide 2: Mocking com NSubstitute
var repo = Substitute.For<IUsuarioRepositorio>();
repo.ObterPorEmailAsync("teste@empresa.com").Returns(new Usuario("Carlos"));
// Verificação de chamada:
await repo.Received(1).ObterPorEmailAsync(Arg.Any<string>());
🎯 Slide 3: Asserções de Exceções
Action act = () => conta.Sacar(1000m);act.Should().Throw<SaldoInsuficienteException>().WithMessage("*insuficiente*");
🔗 Navegação do Capítulo 16
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim