from gtest primer
基本概念
一個測試程序的框架:
test program
-test case 1
-test1
-ASSERT_*
-EXPECT_*
-test2
-test case 2
-test1
-test3
-test case 3
-test4
- 一個測試程序包含若干個測試套(test case);
- 一個測試套包含若干個測試用例(test);
- 一個測試用例包含若干個斷言(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/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$