reference:https://cloud.tencent.com/developer/article/1449409
对于稍微复杂些的测试用例,例如需要共享数据:
class CHashTableTest : public ::testing::Test {
protected:
CHashTableTest():ht(100){
}
virtual void SetUp() {
key1 = "testkey1";
key2 = "testkey2";
}
// virtual void TearDown() {}
CHashTable ht;
string key1;
string key2;
};
然后开始写测试用例,用例里可以直接使用上面类中的成员:
TEST_F(CHashTableTest, hashfunc)
{
CHashElement he;
ASSERT_NE(\
ht.getHashKey((char*)key1.c_str(), key1.size(), 0),\
ht.getHashKey((char*)key2.c_str(), key2.size(), 0));
ASSERT_NE(\
ht.getHashKey((char*)key1.c_str(), key1.size(), 0),\
ht.getHashKey((char*)key1.c_str(), key1.size(), 1));
ASSERT_EQ(\
ht.getHashKey((char*)key1.c_str(), key1.size(), 0),\
ht.getHashKey((char*)key1.c_str(), key1.size(), 0));
}
TEST_F(CHashTableTest, hashfuncOther)
{
CHashElement he;
ASSERT_NE(\
ht.getHashKey((char*)key1.c_str(), key1.size(), 0),\
ht.getHashKey((char*)key2.c_str(), key2.size(), 0));
ASSERT_NE(\
ht.getHashKey((char*)key1.c_str(), key1.size(), 0),\
ht.getHashKey((char*)key1.c_str(), key1.size(), 1));
ASSERT_EQ(\
ht.getHashKey((char*)key1.c_str(), key1.size(), 0),\
ht.getHashKey((char*)key1.c_str(), key1.size(), 0));
}
注意,TEST_F宏会直接生成一个类,这个类继承自上面我们写的CHashTableTest类。
gtest提供ASSERT_和EXPECT_系列的宏,用于判断二进制、字符串等对象是否相等、真假等等。这两种宏的区别是,ASSERT_失败了不会往下执行,而EXPECT_会继续。
3、如何执行单元测试
首先,我们自己要有一个main函数,函数内容非常简单:
#include "gtest/gtest.h"
int main(int argc, char** argv) {
testing::InitGoogleTest(&argc, argv);
// Runs all tests using Google Test.
return RUN_ALL_TESTS();
}
4、google test内部是如何执行我们的单元测试用例的
首先从main函数看起。
我们的main函数执行了RUN_ALL_TESTS宏,这个宏干了些什么事呢?
#define RUN_ALL_TESTS()\
(::testing::UnitTest::GetInstance()->Run())
} // namespace testing