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