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 Test | Catch2 | |
|---|---|---|
| Экосистема | Google Mock, CI | BDD-стиль, быстрый старт |
| Стиль | TEST, EXPECT_* | TEST_CASE, SECTION |
| Типичное применение | крупные legacy/C++ проекты | новые библиотеки, header-only |
Советы
- Тестовый target не линкуйте с
mainприложения — отдельный executable. - В CI:
ctest -jпослеcmake --build. - Для Qt UI — Qt Test поверх unit-тестов логики.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). C++ как язык системного программирования - ключевые принципы, область применения и инженерные требования к коду. Экосистема приложений на C++ - области применения языка от системного ПО до высоконагруженных вычислений. Фундамент для начинающего программиста - что повторить, как работать, чего ожидать. Гайд по установке и настройке с написанием первой программы и её запуском. Директива препроцессора include используется для подключения заголовочных файлов в исходный код. Она сообщает компилятору вставить содержимое указанного файла в текущее место перед началом компиляции. Конфигурация — это набор правил и переменных, которые управляют процессом превращения исходного текста в исполняемый продукт. Примеры простых и полезных консольных приложений с демонстрацией концепций языка. Минимальный кроссплатформенный проект C++17 с CMake и сборкой из командной строки. Набор советов, правил, принципов и обычаев в разработке на этом языке. Типизация, набор правил определения типа данных значений языка. Операторы и выражения в C++ - семантика операций, приоритеты и построение корректной вычислительной логики. Циклы и управляющие конструкции в C++ - семантика ветвлений, повторений и контроль потока на уровне языка.C++ - язык системного программирования
Экосистема приложений на C++
Что требуется знать перед началом изучения языка программирования C++
Первая программа на C++
Начало работы с C++
Конфигурация и сборка в C++
Простые приложения на C++
CMake — первая программа
Рекомендации по разработке на C++
Типы данных в C++
Операторы и выражения в C++
Циклы и управляющие конструкции в C++