C++
Testy jednostkowe w C ++
Szukaj…
Wprowadzenie
Testowanie jednostkowe to poziom testowania oprogramowania, który weryfikuje zachowanie i poprawność jednostek kodu.
W C ++ „jednostki kodu” często odnoszą się do klas, funkcji lub grup obu. Testowanie jednostkowe jest często przeprowadzane przy użyciu specjalistycznych „środowisk testowych” lub „bibliotek testowych”, które często używają nietrywialnych wzorców składni lub użytkowania.
W tym temacie zostaną omówione różne strategie i biblioteki lub struktury testów jednostkowych.
Test Google
Google Test to platforma testowa C ++ obsługiwana przez Google. Wymaga zbudowania biblioteki gtest
i powiązania jej ze środowiskiem testowym podczas budowania pliku przypadku testowego.
Minimalny przykład
// 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
Złapać
Catch to biblioteka zawierająca tylko nagłówki, która pozwala używać zarówno stylu testowania jednostek TDD, jak i BDD .
Poniższy fragment kodu znajduje się na stronie dokumentacji połowów pod tym linkiem :
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 );
}
}
}
}
Dogodnie te testy będą raportowane w następujący sposób:
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