🧩 Exercícios Práticos: Testes Automatizados com Catch2 e GoogleTest

Spec Sistemas Com Cpp • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 16.1 — Caso de Teste Básico com REQUIRE e CHECK no Catch2

Contexto: Caso de Teste Básico com REQUIRE e CHECK no Catch2 no contexto de Testes Automatizados com Catch2 e GoogleTest.

Requisitos de Execução:

  1. Criar suite de testes validando funções matemáticas com asserções declarativas.

Resultado Esperado

Testes unitários executados e aprovados com Catch2.

📤 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 Catch2 e GoogleTest
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <cassert>

int somar(int a, int b) { return a + b; }

int main() {
    std::cout << "Executando suite de testes..." << std::endl;
    assert(somar(2, 3) == 5);
    assert(somar(-1, 1) == 0);
    std::cout << "Todos os 2 testes unitarios foram aprovados com sucesso!" << std::endl;
    return 0;
}

🔍 Nível 2: Prática

Problema 16.2 — Seções e Subcasos com SECTION e TEST_CASE

Contexto: Seções e Subcasos com SECTION e TEST_CASE no contexto de Testes Automatizados com Catch2 e GoogleTest.

Requisitos de Execução:

  1. Estruturar testes com contexto compartilhado e subseções isoladas.

Resultado Esperado

Seções de teste isoladas executadas sequencialmente.

📤 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 Catch2 e GoogleTest
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <vector>
#include <cassert>

void testar_vector() {
    std::vector<int> v;
    // Section: Push
    v.push_back(10);
    assert(v.size() == 1);
    // Section: Clear
    v.clear();
    assert(v.empty());
    std::cout << "Seções de teste do vector aprovadas.\n";
}

int main() {
    testar_vector();
    return 0;
}

⚡ Nível 3: Integração

Problema 16.3 — Testes Parametrizados (Data-Driven Testing) com GENERATE

Contexto: Testes Parametrizados (Data-Driven Testing) com GENERATE no contexto de Testes Automatizados com Catch2 e GoogleTest.

Requisitos de Execução:

  1. Executar o mesmo caso de teste para uma matriz de entradas e saídas esperadas.

Resultado Esperado

Teste parametrizado aprovado para múltiplos cenários de borda.

📤 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 Catch2 e GoogleTest
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <vector>
#include <cassert>

bool eh_par(int n) { return n % 2 == 0; }

int main() {
    std::vector<std::pair<int, bool>> casos{{2, true}, {3, false}, {0, true}, {-2, true}};
    for (const auto& [num, esperado] : casos) {
        assert(eh_par(num) == esperado);
    }
    std::cout << "Matriz de casos de teste parametrizados aprovada!\n";
    return 0;
}

🏆 Nível 4: Desafio Corporativo

Problema 16.4 — Benchmarking de Performance com Catch2 / Google Benchmark

Contexto: Benchmarking de Performance com Catch2 / Google Benchmark no contexto de Testes Automatizados com Catch2 e GoogleTest.

Requisitos de Execução:

  1. Medir tempo de execução e throughput de algoritmos críticos em nanossegundos.

Resultado Esperado

Benchmark corporativo executado com relatório de latência p99.

📤 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 Catch2 e GoogleTest
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <chrono>
#include <vector>
#include <numeric>

int main() {
    std::vector<int> dados(100000, 1);
    auto t1 = std::chrono::high_resolution_clock::now();
    long long soma = std::accumulate(dados.begin(), dados.end(), 0LL);
    auto t2 = std::chrono::high_resolution_clock::now();

    auto duracao = std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count();
    std::cout << "Soma: " << soma << " | Tempo: " << duracao << " microssegundos\n";
    return 0;
}

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