C++ Academy · Aula

Asserções e matchers

Escreva verificações expressivas

Aula 2 de 413 etapas

Asserções e matchers é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

Asserções expressam expectativas

As asserções do GTest verificam condições dentro de um teste. Elas têm dois níveis de severidade.

  • EXPECT_*: a falha é registrada e o teste continua
  • ASSERT_*: a falha interrompe imediatamente o teste atual

EXPECT versus ASSERT

Use ASSERT_* quando continuar causaria uma falha, por exemplo, após verificar um ponteiro nulo; caso contrário, use EXPECT_* para ver todas as falhas de uma só vez.

#include <gtest/gtest.h>

TEST(Demo, MixedChecks) {
    int* p = new int(5);
    ASSERT_NE(p, nullptr);
    EXPECT_EQ(*p, 5);
    delete p;
}

Asserções de comparação

As principais macros de comparação:

  • EXPECT_EQ, EXPECT_NE
  • EXPECT_LT, EXPECT_LE
  • EXPECT_GT, EXPECT_GE
#include <gtest/gtest.h>

TEST(Compare, Numbers) {
    EXPECT_LT(2, 3);
    EXPECT_GE(5, 5);
}

Asserções booleanas

EXPECT_TRUE e EXPECT_FALSE verificam diretamente condições booleanas.

#include <gtest/gtest.h>

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

TEST(Bool, Even) {
    EXPECT_TRUE(is_even(4));
    EXPECT_FALSE(is_even(3));
}

Comparações de ponto flutuante

Nunca use EXPECT_EQ com números de ponto flutuante. Use EXPECT_FLOAT_EQ, EXPECT_DOUBLE_EQ ou EXPECT_NEAR com uma tolerância.

#include <gtest/gtest.h>

TEST(Floats, Approx) {
    EXPECT_DOUBLE_EQ(0.1 + 0.2, 0.3);
    EXPECT_NEAR(3.14159, 3.14, 0.01);
}

Asserções de texto

Para strings C, use EXPECT_STREQ / EXPECT_STRNE. Para std::string, EXPECT_EQ funciona, pois compara por valor.

#include <gtest/gtest.h>
#include <string>

TEST(Strings, Compare) {
    EXPECT_STREQ("hi", "hi");
    EXPECT_EQ(std::string("ok"), "ok");
}

Asserções de exceções

Verifique se o código lança a exceção esperada.

#include <gtest/gtest.h>
#include <stdexcept>

void check(int n) {
    if (n < 0) throw std::runtime_error("neg");
}

TEST(Throws, Negative) {
    EXPECT_THROW(check(-1), std::runtime_error);
    EXPECT_NO_THROW(check(1));
}

Mensagens de falha personalizadas

Insira contexto adicional em uma asserção com << para facilitar o diagnóstico das falhas.

#include <gtest/gtest.h>

TEST(Message, WithContext) {
    int x = 7;
    EXPECT_EQ(x, 7) << "x had unexpected value " << x;
}

Correspondedores do GMock com EXPECT_THAT

EXPECT_THAT combina um valor com um correspondedor para criar verificações expressivas, por exemplo, EXPECT_THAT(v, ElementsAre(1, 2, 3)).

#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <vector>
using ::testing::ElementsAre;

TEST(Matchers, Vector) {
    std::vector<int> v{1, 2, 3};
    EXPECT_THAT(v, ElementsAre(1, 2, 3));
}

Correspondedores úteis

Entre os correspondedores comuns estão:

  • Eq, Ne, Gt, Lt
  • Contains, ElementsAre, UnorderedElementsAre
  • HasSubstr, StartsWith, EndsWith

Escolhendo a asserção certa

Prefira a asserção mais específica: ela produz mensagens de falha mais claras do que uma EXPECT_TRUE genérica. EXPECT_EQ(a, b) exibe os dois valores; EXPECT_TRUE(a == b) não.

Verificação rápida

Relembre a diferença entre EXPECT e ASSERT.

Recapitulação

Você aprendeu as asserções do GTest.

  • EXPECT_* continua; ASSERT_* interrompe o teste
  • Macros de comparação, booleanas, de ponto flutuante, de texto e de exceções
  • Insira contexto adicional com <<
  • EXPECT_THAT + correspondedores para verificações expressivas
Grátis para começar

Aprenda C++ com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
51
Aulas
203

Perguntas Frequentes

A aula “Asserções e matchers” é grátis?

Sim — o texto completo de “Asserções e matchers” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Asserções e matchers”?

Escreva verificações expressivas Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Asserções e matchers”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Configuração do GTest
  2. Asserções e matchers
  3. Fixtures e configuração
  4. Mocking com GMock
← Voltar para C++ Academy