[C++] 在 GoogleTest 裡面使用全域的 SetUp/TearDown 函式
今天在用 GoogleTest 寫 unit-testing 時,
因為有個初始化的動作很耗時,想說每次跑 unit-testing 時最好只跑一次,
而不是每個 test case 或 test 都跑…
查了一下,Google Test 是有 Global SetUp/TearDown 可以用的:
不過要用這個的話,得繼承 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,890 次)