Unit Test C: Comprehensive Guide for Effective Code Testing
Unit-тестирование является важной практикой, которая позволяет разработчикам проверить отдельные части кода (юниты) и убедиться в их корректной работе. Процесс заключается в написании кода, который проверяет определенную функциональность (юнит) и возвращает сообщение о том, прошел ли тест или нет.
Примеры кода:
Например, пусть имеется функция, которая складывает два числа и возвращает их сумму:
int sum(int a, int b) {
return a + b;
}
Для тестирования этой функции можно написать следующий юнит-тест:
void test_sum() {
assert(sum(2, 3) == 5);
assert(sum(-2, 3) == 1);
assert(sum(0, 0) == 0);
assert(sum(2147483647, 1) == -2147483648);
}
gtest:
TEST(SumTest, SumPositiveNumbers) {
EXPECT_EQ(sum(4, 7), 11);
EXPECT_EQ(sum(50, 50), 100);
}
TEST(SumTest, SumNegativeNumbers) {
EXPECT_EQ(sum(-4, -7), -11);
EXPECT_EQ(sum(-50, -50), -100);
}
TEST(SumTest, SumPositiveAndNegativeNumbers) {
EXPECT_EQ(sum(4, -7), -3);
EXPECT_EQ(sum(-50, 50), 0);
EXPECT_EQ(sum(2147483647, 1), -2147483648);
}
В первом тесте проверяется, что функция правильно считает сумму двух положительных чисел. Во втором – сумму двух отрицательных чисел. В третьем – сумму положительного и отрицательного числа. В каждом случае для сравнения используется макрос `EXPECT_EQ`, который проверяет, равны ли значения, и в случае несоответствия выводит сообщение об ошибке.
Также в стандартной библиотеке С++ есть библиотека `cassert`, которая позволяет использовать макрос `assert`. Он проверяет истинность заданного выражения, и если оно неверно, выводит сообщение об ошибке и завершает выполнение программы.
Таким образом, unit-тестирование позволяет обнаруживать ошибки в коде на ранних этапах разработки и улучшать его качество, а также облегчает поддержку кода и его последующие модификации.