Introdução: Por que seu código C++ precisa de proteção?
\n\nImagine que você escreveu um programa em C++. Ele compila sem erros, executa e até produz algum resultado. Você respira aliviado e envia o código para produção. E no dia seguinte, um colega te escreve: "Ei, sua função calculateSum falha se você passar um número negativo". E você começa a procurar o bug freneticamente, relendo centenas de linhas de código.
Situação familiar? Se sim, você veio ao lugar certo. Testes C++ não são uma burocracia chata, mas seu escudo pessoal contra esses incidentes. Neste artigo, vamos abordar por onde começar os testes C++ para iniciantes, sem nos aprofundarmos na teoria. Você aprenderá quais ferramentas usar, como escrever seus primeiros testes e por que isso economizará horas de nervosismo.
\n\nO que são testes unitários e para que servem?
\n\nTestes unitários (ou testes de módulo) são a verificação de "blocos" individuais do seu código: funções, classes, métodos. Você escreve um pequeno programa que chama sua função com dados específicos e verifica se o resultado corresponde ao esperado.
\n\nPor que um iniciante precisa disso?
\n- \n
- Tranquilidade: você sabe exatamente que seu código funciona. \n
- Velocidade: você não tem medo de fazer alterações, porque os testes dirão imediatamente se algo quebrou. \n
- Documentação: os testes são um exemplo vivo de uso do seu código. \n
Sem testes C++, um projeto é como uma casa construída sem fundação. Parece que está de pé, mas o primeiro terremoto (leia-se: mudança de requisitos) a destruirá.
\n\nFerramentas para testes C++: escolhendo o primeiro framework
\n\nPara testes unitários C++, existem vários frameworks populares. Para iniciantes, recomendo dois: Google Test (gtest) e Catch2. Ambos são gratuitos, têm excelente documentação e são fáceis de integrar.
\n\nGoogle Test (gtest)
\nPadrão da indústria. Usado no Google, YouTube e muitos projetos open-source. Poderoso, mas requer alguma configuração.
\n\nCatch2
\nMais leve e "amigável" para iniciantes. Integra-se com um único arquivo de cabeçalho. Ideal para começar.
\n\nNeste artigo, usaremos Catch2 — é minimalista e permitirá focar no essencial, não na configuração.
\n\nComo instalar o Catch2 e escrever o primeiro teste?
\n\nA instalação do Catch2 é simples. Baixe o único arquivo de cabeçalho catch.hpp do repositório oficial e coloque-o na pasta do seu projeto. Não são necessários cmake, make ou linkagens.
Agora vamos escrever um programa simples em C++ e testá-lo.
\n\nExemplo: função de soma
\nCrie o arquivo calculator.cpp:
#include <iostream>\n#include "catch.hpp"\n\n// Função a ser testada\nint add(int a, int b) {\n return a + b;\n}\n\n// Teste\nTEST_CASE("Adição funciona corretamente", "[math]") {\n REQUIRE(add(2, 3) == 5);\n REQUIRE(add(-1, 1) == 0);\n REQUIRE(add(0, 0) == 0);\n REQUIRE(add(100, 200) == 300);\n}\n\nAgora compile e execute:
\n\ng++ -std=c++11 calculator.cpp -o calculator_test\n./calculator_test\n\nVocê verá algo como:
\n\nAll tests passed (4 assertions in 1 test case)\n\nParabéns! Você escreveu seu primeiro teste unitário em C++. Vamos analisar o que aconteceu:
\n- \n
TEST_CASE— é uma macro que cria um cenário de teste. \nREQUIRE— verifica uma condição. Se for falsa, o teste falha. \n"[math]"— tag para agrupar testes. \n
Dicas práticas: como escrever bons testes
\n\nApenas escrever um teste não é suficiente. É preciso escrever testes úteis. Aqui estão algumas regras que elevarão seus testes unitários