Модульное тестирование, или юнит-тестирование — процесс в программировании, позволяющий проверить на корректность отдельный Модуль исходного кода программы. Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.
Например, имеется функция main()
- #include "this/package/foo.h"
- #include <gtest/gtest.h>
- namespace {
- class FooTest : public ::testing::Test {
- protected:
- virtual void SetUp()
- TEST_F(FooTest, MethodBarDoesAbc)
- {
- const string input_filepath = "this/package/testdata/myinputfile.dat";
- const string output_filepath = "this/package/testdata/myoutputfile.dat";
- Foo f;
- EXPECT_EQ(0, f.Bar(input_filepath, output_filepath));
- }
- TEST_F(FooTest, DoesXyz)
- }
- int main(int argc, char **argv) {
- ::testing::InitGoogleTest(&argc, argv);
- return RUN_ALL_TESTS();
- }
- }
Тест для этой функции будет выглядеть следующим образом:
- TEST_F(QueueTest, IsEmptyInitially) {
- EXPECT_EQ(0, q0_.size());
- }
- TEST_F(QueueTest, DequeueWorks) {
- int* n = q0_.Dequeue();
- EXPECT_EQ(NULL, n);
- n = q1_.Dequeue();
- ASSERT_TRUE(n != NULL);
- EXPECT_EQ(1, *n);
- EXPECT_EQ(0, q1_.size());
- delete n;
- n = q2_.Dequeue();
- ASSERT_TRUE(n != NULL);
- EXPECT_EQ(2, *n);
- EXPECT_EQ(1, q2_.size());
- delete n;
- }
|