[C++] 在 Unit-testing 裡呼叫 class 裡的 protected member
今天在用 Google Test 寫一個 C++ class 的測試程式時,
遇到了要測試 protected function 的問題…
原本要被測試的 class 定義像是下面這樣:
class Scan { protected: static bool IsValidFile(); };
當你想要測試 IsValidFile() 的時候,就會遇到無法從外部存取它的問題…
查了一下 What is the best way to unit test a protected method in C++?
是有人說可以加 friend class,不過不是很好,
大家比較推薦的方法是繼承這個 class 後,再用一個 public function 來呼叫原本的函式,例如:
class WrapScan : public Scan { public: static bool IsValidFile() { return Scan::IsValidFile(); } };
有了這個 WrapScan class 後,就可以直接呼叫它的 IsValidFile() 來測試了,
下面是用 Google Test 的寫法:
TEST(Scan, IsValidFile)
{
EXPECT_TRUE(WrapScan::IsValidFile());
}
(本頁面已被瀏覽過 261 次)