gtest的測試程序框架

from gtest primer

基本概念

一個測試程序的框架:

test program
    -test case 1
        -test1
            -ASSERT_*
            -EXPECT_*
        -test2
    -test case 2
        -test1
        -test3
    -test case 3
        -test4
  1. 一個測試程序包含若干個測試套(test case);
  2. 一個測試套包含若干個測試用例(test);
  3. 一個測試用例包含若干個斷言(assertion)。

下面是測試add程序的測試程序:

#include <gtest/gtest.h>

extern int add(int a, int b);

TEST(testCase, test0)
{
    EXPECT_EQ(add(2, 3), 5);
}

TEST(testCase, test1)
{
    EXPECT_EQ(add(2, 2), 4);
}

TEST(testCaseAnother, test1)
{
    EXPECT_EQ(add(-2, 2), 0);
}

int main(int argc, char **argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

斷言(assertion)

assertion包含兩種斷言:

  • ASSERT_*
  • EXPECT_*

參見:
https://github.com/google/googletest/blob/master/googletest/docs/Primer.md#assertions

EXPECT_EQ(add(2, 3), 5);就是一個斷言。

測試用例(test)

測試用例和函數(shù)類似,由語句和assertion組成。

測試套(test case)

若干個功能類似的測試用例組成一個測試套。

TEST(testCase, test0)
{
    EXPECT_EQ(add(2, 3), 5);
}

就是一個測試用例,這個用例屬于testCase這個測試套,名字叫test0。

測試固定裝置(test fixtures)

如果想若干個測試用例共用一套測試配置,就可以使用測試固定裝置,其實也就是派生于::testing::Test的類。

參見:
https://github.com/google/googletest/blob/master/googletest/docs/Primer.md#test-fixtures-using-the-same-data-configuration-for-multiple-tests

例子

https://github.com/sunday1103/Notebook/tree/master/library/gtest/proj

#include <gtest/gtest.h>
#include <iostream>

extern int add(int a, int b);

class addTest : public ::testing::Test {
 protected:
    addTest()
    {
        a = 10;
    }

    virtual void SetUp() 
    {
        a++;
        std::cout << "enter SetUp" << std::endl;
        std::cout << "a is: "<< a << std::endl;
    }

    virtual void TearDown() 
    {
        std::cout << "enter TearDown" << std::endl;
        std::cout << "a is: "<< a << std::endl;
        std::cout << std::endl;
    }

  int a;
};

TEST_F(addTest, test0)
{
    EXPECT_EQ(add(2, 3), 5);
}

TEST_F(addTest, test1)
{
    EXPECT_EQ(add(2, 2), 4);
}

TEST_F(addTest, test2)
{
    EXPECT_EQ(add(2, 22), 24);
}

運行結(jié)果:

huangyang@huangyang-desktop:~/Notebook$ cd library/gtest/proj/
huangyang@huangyang-desktop:~/Notebook/library/gtest/proj$ make
g++ *.cc -lgtest -lpthread
huangyang@huangyang-desktop:~/Notebook/library/gtest/proj$ ./a.out
[==========] Running 6 tests from 3 test cases.
[----------] Global test environment set-up.
[----------] 2 tests from testCase
[ RUN      ] testCase.test0
[       OK ] testCase.test0 (0 ms)
[ RUN      ] testCase.test1
[       OK ] testCase.test1 (0 ms)
[----------] 2 tests from testCase (0 ms total)

[----------] 1 test from testCaseAnother
[ RUN      ] testCaseAnother.test1
[       OK ] testCaseAnother.test1 (0 ms)
[----------] 1 test from testCaseAnother (0 ms total)

[----------] 3 tests from addTest
[ RUN      ] addTest.test0
enter SetUp
a is: 11
enter TearDown
a is: 11

[       OK ] addTest.test0 (0 ms)
[ RUN      ] addTest.test1
enter SetUp
a is: 11
enter TearDown
a is: 11

[       OK ] addTest.test1 (0 ms)
[ RUN      ] addTest.test2
enter SetUp
a is: 11
enter TearDown
a is: 11

[       OK ] addTest.test2 (0 ms)
[----------] 3 tests from addTest (0 ms total)

[----------] Global test environment tear-down
[==========] 6 tests from 3 test cases ran. (0 ms total)
[  PASSED  ] 6 tests.
huangyang@huangyang-desktop:~/Notebook/library/gtest/proj$
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容