Перейти к основному содержимому

Google Test и Catch2 в C++

Разработчику Архитектору

Google Test и Catch2 в C++

Краткий практический старт для Google Test (gtest) и Catch2 в CMake. Подробнее про Visual Studio + NuGet: 1002.md. Обзор фреймворков: 10.md.

Базовый CMake-проект: CMake — первая программа.


Google Test + CMake (FetchContent)

CMakeLists.txt:

cmake_minimum_required(VERSION 3.20)
project(calc_test LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)

add_library(calc src/calc.cpp)
target_include_directories(calc PUBLIC include)

include(FetchContent)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip
)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)

enable_testing()
add_executable(calc_tests tests/calc_test.cpp)
target_link_libraries(calc_tests PRIVATE calc GTest::gtest_main)
include(GoogleTest)
gtest_discover_tests(calc_tests)

tests/calc_test.cpp:

#include <gtest/gtest.h>
#include "calc.hpp"

TEST(Calc, Adds) {
EXPECT_EQ(5, add(2, 3));
}
cmake -S . -B build && cmake --build build
ctest --test-dir build --output-on-failure

Catch2 v3 (header + CMake)

FetchContent_Declare(
Catch2
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
GIT_TAG v3.5.4
)
FetchContent_MakeAvailable(Catch2)

add_executable(catch_tests tests/catch_calc.cpp)
target_link_libraries(catch_tests PRIVATE calc Catch2::Catch2WithMain)
#include <catch2/catch_test_macros.hpp>
#include "calc.hpp"

TEST_CASE("add works", "[calc]") {
REQUIRE(add(2, 3) == 5);
}

Когда что выбирать

Google TestCatch2
ЭкосистемаGoogle Mock, CIBDD-стиль, быстрый старт
СтильTEST, EXPECT_*TEST_CASE, SECTION
Типичное применениекрупные legacy/C++ проектыновые библиотеки, header-only

Советы

  • Тестовый target не линкуйте с main приложения — отдельный executable.
  • В CI: ctest -j после cmake --build.
  • Для Qt UI — Qt Test поверх unit-тестов логики.

См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).