[C++] 在 GoogleTest 裡面使用全域的 SetUp/TearDown 函式

[C++] 在 GoogleTest 裡面使用全域的 SetUp/TearDown 函式

今天在用 GoogleTest 寫 unit-testing 時,

因為有個初始化的動作很耗時,想說每次跑 unit-testing 時最好只跑一次,

而不是每個 test case 或 test 都跑…

 

查了一下,Google Test 是有 Global SetUp/TearDown 可以用的:

Global Set-Up and Tear-Down

 

不過要用這個的話,得繼承 testing::Environmemt 類別,

並且在 main() 裡面用 AddGlobalTestEnvironment() 將這類別加進去~

像我原本是直接用 GoogleTest 附的 gtest-main.a,就不用自己寫 main(),

但為了這個,只好還是寫了,不過其實並不困難~

下面是一個 main() 的例子:

#include "gtest/gtest.h"
class MyTestEnvironment : public ::testing::Environment
{
public:
virtual ~MyTestEnvironment() {}
// Override this to define how to set up the environment.
virtual void SetUp()
{
// Run a scan before initialization
EXPECT_EQ(RET_ERROR_NOT_INIT_YET, ScanFile("test.exe"));
// Init TFE
ASSERT_EQ(RET_SUCCESS, MyInit());
}
// Override this to define how to tear down the environment.
virtual void TearDown()
{
// Uninitialization
MyUninit();
}
};
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
::testing::AddGlobalTestEnvironment(new MyTestEnvironment);
return RUN_ALL_TESTS();
}

 

在繼承自 Environment 的這個 MyTestEnvironment 類別中,

要實作 SetUp() 和 TearDown() 兩個 virtual function,

這兩個函式就是在整個 unit-testing 程式開始和結束時才會執行~

裡面也可以用 ASSERT_*() 和 EXPECT_*() 來檢查程式的正確性~

 

因為 main() 是自己寫的,就要記得 Makefile 裡面,

本來連結 gtest-main.a 的部分,要改成連結 gtest.a,例如:

TestAll : main.o TestCommon.o gtest.a
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@

 

(本頁面已被瀏覽過 1,909 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料