Модульное тестирование

Модульное тестирование, или юнит-тестирование — процесс в программировании, позволяющий проверить на корректность отдельный Модуль исходного кода программы.

Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.


Например, имеется функция main()


  1. #include "this/package/foo.h"
  2. #include <gtest/gtest.h>
  3. namespace {
  4. class FooTest : public ::testing::Test {
  5.  protected:
  6. virtual void SetUp() 
  7. TEST_F(FooTest, MethodBarDoesAbc)
  8. {
  9.   const string input_filepath = "this/package/testdata/myinputfile.dat";
  10.   const string output_filepath = "this/package/testdata/myoutputfile.dat";
  11.   Foo f;
  12.   EXPECT_EQ(0, f.Bar(input_filepath, output_filepath));
  13. }
  14. TEST_F(FooTest, DoesXyz)
  15. }
  16. int main(int argc, char **argv) {
  17.   ::testing::InitGoogleTest(&argc, argv);
  18.   return RUN_ALL_TESTS();
  19. }
  20. }


Тест для этой функции будет выглядеть следующим образом:


  1.  TEST_F(QueueTest, IsEmptyInitially) {
  2.   EXPECT_EQ(0, q0_.size());
  3. }
  4. TEST_F(QueueTest, DequeueWorks) {
  5.   int* n = q0_.Dequeue();
  6.   EXPECT_EQ(NULL, n);
  7.   n = q1_.Dequeue();
  8.   ASSERT_TRUE(n != NULL);
  9.   EXPECT_EQ(1, *n);
  10.   EXPECT_EQ(0, q1_.size());
  11.   delete n;
  12.   n = q2_.Dequeue();
  13.   ASSERT_TRUE(n != NULL);
  14.   EXPECT_EQ(2, *n);
  15.   EXPECT_EQ(1, q2_.size());
  16.   delete n;
  17. }
Comments