Asserções e matchers
Escreva verificações expressivas
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 continuaASSERT_*: 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_NEEXPECT_LT,EXPECT_LEEXPECT_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,LtContains,ElementsAre,UnorderedElementsAreHasSubstr,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
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
- Configuração do GTest
- Asserções e matchers
- Fixtures e configuração
- Mocking com GMock