C++
Тестирование модулей в C ++
Поиск…
Вступление
Модульное тестирование - это уровень тестирования программного обеспечения, который проверяет поведение и правильность единиц кода.
В C ++ «единицы кода» часто относятся к любым классам, функциям или группам. Модульное тестирование часто выполняется с использованием специализированных «тестовых рамок» или «библиотек тестирования», которые часто используют нетривиальные синтаксисы или шаблоны использования.
В этом разделе будут рассмотрены различные стратегии и библиотеки модулей тестирования или фреймворки.
Тест Google
Google Test - это платформа тестирования C ++, поддерживаемая Google. Он требует создания библиотеки gtest
и привязки ее к вашей структуре тестирования при создании файла тестового примера.
Минимальный пример
// main.cpp
#include <gtest/gtest.h>
#include <iostream>
// Google Test test cases are created using a C++ preprocessor macro
// Here, a "test suite" name and a specific "test name" are provided.
TEST(module_name, test_name) {
std::cout << "Hello world!" << std::endl;
// Google Test will also provide macros for assertions.
ASSERT_EQ(1+1, 2);
}
// Google Test can be run manually from the main() function
// or, it can be linked to the gtest_main library for an already
// set-up main() function primed to accept Google Test test cases.
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
// Build command: g++ main.cpp -lgtest
Ловить
Catch - это библиотека только для заголовков, которая позволяет использовать как тестовый стиль блока TDD, так и BDD .
Следующий фрагмент представлен на странице документации Catch по этой ссылке :
SCENARIO( "vectors can be sized and resized", "[vector]" ) {
GIVEN( "A vector with some items" ) {
std::vector v( 5 );
REQUIRE( v.size() == 5 );
REQUIRE( v.capacity() >= 5 );
WHEN( "the size is increased" ) {
v.resize( 10 );
THEN( "the size and capacity change" ) {
REQUIRE( v.size() == 10 );
REQUIRE( v.capacity() >= 10 );
}
}
WHEN( "the size is reduced" ) {
v.resize( 0 );
THEN( "the size changes but not capacity" ) {
REQUIRE( v.size() == 0 );
REQUIRE( v.capacity() >= 5 );
}
}
WHEN( "more capacity is reserved" ) {
v.reserve( 10 );
THEN( "the capacity changes but not the size" ) {
REQUIRE( v.size() == 5 );
REQUIRE( v.capacity() >= 10 );
}
}
WHEN( "less capacity is reserved" ) {
v.reserve( 0 );
THEN( "neither size nor capacity are changed" ) {
REQUIRE( v.size() == 5 );
REQUIRE( v.capacity() >= 5 );
}
}
}
}
Удобно, эти тесты будут сообщаться следующим образом при запуске:
Scenario: vectors can be sized and resized Given: A vector with some items When: more capacity is reserved Then: the capacity changes but not the size