C++:
Pisanie testów
Jak to zrobić:
Korzystając z Google Test Framework
Jedną z najpopularniejszych bibliotek firm trzecich do pisania testów w C++ jest Google Test. Najpierw musisz zainstalować Google Test i połączyć go z twoim projektem. Po skonfigurowaniu możesz zacząć pisać przypadki testowe.
#include <gtest/gtest.h>
int add(int a, int b) {
return a + b;
}
TEST(TestSuiteName, TestName) {
EXPECT_EQ(3, add(1, 2));
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Zapisz kod w pliku i skompiluj go przy użyciu kompilatora g++, łącząc bibliotekę Google Test. Jeśli wszystko jest poprawnie skonfigurowane, uruchomienie wynikowego pliku wykonywalnego uruchomi test, a jeśli funkcja add
działa zgodnie z oczekiwaniami, zobaczysz coś takiego:
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from TestSuiteName
[ RUN ] TestSuiteName.TestName
[ OK ] TestSuiteName.TestName (0 ms)
[----------] 1 test from TestSuiteName (0 ms total)
[==========] 1 test from 1 test suite ran. (1 ms total)
[ PASSED ] 1 test.
Korzystając z Catch2
Innym popularnym frameworkiem do testowania dla C++ jest Catch2. Posiada prostszą składnię i zazwyczaj nie wymaga łączenia z biblioteką (tylko nagłówek). Oto przykład, jak napisać prosty test z Catch2:
#define CATCH_CONFIG_MAIN // To mówi Catch, aby dostarczył main() - rób to tylko w jednym pliku cpp
#include <catch.hpp>
int multiply(int a, int b) {
return a * b;
}
TEST_CASE( "Liczby całkowite są mnożone", "[multiply]" ) {
REQUIRE( multiply(2, 3) == 6 );
}
Po skompilowaniu i uruchomieniu tego testu, Catch2 zapewnia jasne informacje wskazujące, czy test zakończył się sukcesem, czy niepowodzeniem, wraz z wszelkimi informacjami potrzebnymi do debugowania błędów:
===============================================================================
Wszystkie testy zaliczone (1 asercja w 1 przypadku testowym)
Te przykłady pokazują, jak integracja frameworków testowych z twoim procesem rozwoju w C++ może znacząco zwiększyć niezawodność i możliwość utrzymania twojego kodu.