Spec Sistemas Csharp • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 16.1 — Caso de Teste Básico com [Fact] e Asserções Assert.Equal

Contexto: Caso de Teste Básico com [Fact] e Asserções Assert.Equal no contexto de Testes Automatizados com xUnit, FluentAssertions e Moq.

Requisitos de Execução:

  1. Criar classe de testes validando regras de cálculo de desconto com o framework xUnit.

Resultado Esperado

Testes unitários xUnit executados e aprovados com sucesso.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_1_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Testes Automatizados com xUnit, FluentAssertions e Moq
🔑 Gabarito de Código & Solução Comentada
// CalculadoraTests.cs
using Xunit;

public class CalculadoraTests {
    [Fact]
    public void Somar_DoisInteiros_DeveRetornarResultadoCorreto() {
        int a = 10, b = 20;
        int resultado = a + b;
        Assert.Equal(30, resultado);
    }
}

🔍 Nível 2: Prática

Problema 16.2 — Testes Parametrizados com [Theory] e [InlineData]

Contexto: Testes Parametrizados com [Theory] e [InlineData] no contexto de Testes Automatizados com xUnit, FluentAssertions e Moq.

Requisitos de Execução:

  1. Executar o mesmo método de teste com múltiplos conjuntos de dados de entrada e saída esperada.

Resultado Esperado

Teoria xUnit aprovada para todos os cenários de teste parametrizados.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_2_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Testes Automatizados com xUnit, FluentAssertions e Moq
🔑 Gabarito de Código & Solução Comentada
// TheoryTests.cs
using Xunit;

public class ValidacaoTests {
    [Theory]
    [InlineData(2, true)]
    [InlineData(3, false)]
    [InlineData(0, true)]
    public void EhPar_DeveValidarParidade(int numero, bool esperado) {
        bool resultado = numero % 2 == 0;
        Assert.Equal(esperado, resultado);
    }
}

⚡ Nível 3: Integração

Problema 16.3 — Mocking de Interfaces com a Biblioteca Moq

Contexto: Mocking de Interfaces com a Biblioteca Moq no contexto de Testes Automatizados com xUnit, FluentAssertions e Moq.

Requisitos de Execução:

  1. Mockar interface de repositório com Mock<IRepositorio> configurando retorno com .Setup(x => x.Buscar(1)).Returns(...).

Resultado Esperado

Dependência externa mockada permitindo teste unitário isolado da regra de serviço.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_3_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Testes Automatizados com xUnit, FluentAssertions e Moq
🔑 Gabarito de Código & Solução Comentada
// MockTests.cs
using Moq;
using Xunit;

public interface IUsuarioRepo { string ObterNome(int id); }

public class MockTests {
    [Fact]
    public void TestarServicoComMock() {
        var mock = new Mock<IUsuarioRepo>();
        mock.Setup(r => r.ObterNome(1)).Returns("Carlos");
        Assert.Equal("Carlos", mock.Object.ObterNome(1));
    }
}

🏆 Nível 4: Desafio Corporativo

Problema 16.4 — Asserções Fluentes e Legíveis com FluentAssertions

Contexto: Asserções Fluentes e Legíveis com FluentAssertions no contexto de Testes Automatizados com xUnit, FluentAssertions e Moq.

Requisitos de Execução:

  1. Escrever asserções expressivas com resultado.Should().Be(30).And.BePositive().

Resultado Esperado

Asserções fluentes executadas com mensagens de falha ricas e descritivas.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_4_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Testes Automatizados com xUnit, FluentAssertions e Moq
🔑 Gabarito de Código & Solução Comentada
// FluentTests.cs
using FluentAssertions;
using Xunit;

public class RegraNegocioTests {
    [Fact]
    public void Validar_ComEntradaValida_DeveRetornarSucesso() {
        int resultado = 30;
        string[] permissoes = ["Admin", "Editor"];
        resultado.Should().Be(30).And.BePositive();
        permissoes.Should().HaveCount(2).And.Contain("Admin");
    }
}

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos