cpp-testing
Faz seu agente escrever e melhorar testes para código C++. Ajuda a configurar ferramentas de teste e a corrigir erros.
O que ela faz
Ajuda a escrever, corrigir ou entender testes em C++. Isso inclui configurar ferramentas como GoogleTest e CTest, além de investigar por que um teste falhou.
Quando usar
- ✓Escrever um novo teste para uma função em C++.
- ✓Corrigir um teste que está falhando.
- ✓Configurar o sistema de testes do seu projeto.
Exemplo do que pedir para a IA
“Como eu escrevo um teste simples para verificar se a função Soma(a, b) retorna a soma correta?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Você pode usar a biblioteca GoogleTest para criar testes. Ela permite definir cenários específicos e verificar se o resultado do seu código C++ corresponde ao esperado.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill cpp-testingOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/cpp-testing/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Testes em C++ (Habilidade de Agente)
Fluxo de trabalho de testes focado no agente para C++ moderno (C++17/20) usando GoogleTest/GoogleMock com CMake/CTest.
Quando Usar
- Escrevendo novos testes em C++ ou corrigindo testes existentes
- Projetando cobertura de testes unitários/de integração para componentes C++
- Adicionando cobertura de testes, bloqueio de CI (Continuous Integration) ou proteção contra regressão
- Configurando fluxos de trabalho CMake/CTest para execução consistente
- Investigando falhas de testes ou comportamento instável
- Habilitando sanitizers para diagnósticos de memória/corrida (race conditions)
Quando NÃO Usar
- Implementando novas funcionalidades de produto sem alterações nos testes
- Refatorações em larga escala não relacionadas à cobertura de testes ou falhas
- Otimização de desempenho sem regressões de teste para validar
- Projetos que não são C++ ou tarefas que não são de teste
Conceitos Principais
- Loop TDD: vermelho → verde → refatorar (testes primeiro, correção mínima, depois limpezas).
- Isolamento: prefira injeção de dependência e fakes em vez de estado global.
- Layout de testes:
tests/unit,tests/integration,tests/testdata. - Mocks vs. fakes: mock para interações, fake para comportamento com estado.
- Descoberta de CTest: use
gtest_discover_tests()para descoberta de testes estável. - Sinal de CI: execute um subconjunto primeiro, depois a suíte completa com
--output-on-failure.
Fluxo de Trabalho TDD
Siga o loop VERMELHO → VERDE → REFACTOR:
- VERMELHO: escreva um teste que falha e capture o novo comportamento
- VERDE: implemente a menor alteração para passar
- REFACTOR: limpe enquanto os testes permanecem verdes
// tests/add_test.cpp
#include <gtest/gtest.h>
int Add(int a, int b); // Provided by production code.
TEST(AddTest, AddsTwoNumbers) { // RED
EXPECT_EQ(Add(2, 3), 5);
}
// src/add.cpp
int Add(int a, int b) { // GREEN
return a + b;
}
// REFACTOR: simplify/rename once tests pass
Exemplos de Código
Teste Unitário Básico (gtest)
// tests/calculator_test.cpp
#include <gtest/gtest.h>
int Add(int a, int b); // Provided by production code.
TEST(CalculatorTest, AddsTwoNumbers) {
EXPECT_EQ(Add(2, 3), 5);
}
Fixture (gtest)
// tests/user_store_test.cpp
// Pseudocode stub: replace UserStore/User with project types.
#include <gtest/gtest.h>
#include <memory>
#include <optional>
#include <string>
struct User { std::string name; };
class UserStore {
public:
explicit UserStore(std::string /*path*/) {}
void Seed(std::initializer_list<User> /*users*/) {}
std::optional<User> Find(const std::string &/*name*/) { return User{"alice"}; }
};
class UserStoreTest : public ::testing::Test {
protected:
void SetUp() override {
store = std::make_unique<UserStore>(":memory:");
store->Seed({{"alice"}, {"bob"}});
}
std::unique_ptr<UserStore> store;
};
TEST_F(UserStoreTest, FindsExistingUser) {
auto user = store->Find("alice");
ASSERT_TRUE(user.has_value());
EXPECT_EQ(user->name, "alice");
}
Mock (gmock)
// tests/notifier_test.cpp
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <string>
class Notifier {
public:
virtual ~Notifier() = default;
virtual void Send(const std::string &message) = 0;
};
class MockNotifier : public Notifier {
public:
MOCK_METHOD(void, Send, (const std::string &message), (override));
};
class Service {
public:
explicit Service(Notifier ¬ifier) : notifier_(notifier) {}
void Publish(const std::string &message) { notifier_.Send(message); }
private:
Notifier ¬ifier_;
};
TEST(ServiceTest, SendsNotifications) {
MockNotifier notifier;
Service service(notifier);
EXPECT_CALL(notifier, Send("hello")).Times(1);
service.Publish("hello");
}
Início Rápido CMake/CTest
# CMakeLists.txt (excerpt)
cmake_minimum_required(VERSION 3.20)
project(example LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(FetchContent)
# Prefer project-locked versions. If using a tag, use a pinned version per project policy.
set(GTEST_VERSION v1.17.0) # Adjust to project policy.
FetchContent_Declare(
googletest
# Google Test framework (official repository)
URL https://github.com/google/googletest/archive/refs/tags/${GTEST_VERSION}.zip
)
FetchContent_MakeAvailable(googletest)
add_executable(example_tests
tests/calculator_test.cpp
src/calculator.cpp
)
target_link_libraries(example_tests GTest::gtest GTest::gmock GTest::gtest_main)
enable_testing()
include(GoogleTest)
gtest_discover_tests(example_tests)
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build -j
ctest --test-dir build --output-on-failure
…
Perguntas frequentes
O que é TDD?
TDD significa Test-Driven Development (Desenvolvimento Guiado por Testes). É uma técnica onde você escreve o teste antes de escrever o código que ele vai testar.
O que são Mocks e Fakes?
Mocks e Fakes são versões simuladas de outras partes do seu código usadas nos testes. Mocks verificam se uma função foi chamada corretamente, enquanto Fakes simulam o comportamento de componentes mais complexos.
Como configuro o GoogleTest com CMake?
Você pode usar o `FetchContent` no CMake para baixar e configurar o GoogleTest automaticamente no seu projeto, e depois usar `gtest_discover_tests` para que o CTest encontre seus testes.
Detalhes
Descrição original do autor
Use only when writing/updating/fixing C++ tests, configuring GoogleTest/CTest, diagnosing failing or flaky tests, or adding coverage/sanitizers.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #34
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
webapp-testing
Permite testar aplicações web locais, verificar funcionalidades e depurar o comportamento da interface. Captura screenshots e logs do navegador.
anthropics/skills
ponytail-audit
Faz uma auditoria completa do código. Ele encontra bugs, falhas de segurança, código lento e sugere o que remover ou melhorar.
DietrichGebert/ponytail
ponytail-review
Revisa a qualidade de uma mudança no código. Verifica se a lógica está correta, se é segura, rápida e se todas as linhas são necessárias.
DietrichGebert/ponytail