[C++] 在 Unit-testing 裡呼叫 class 裡的 protected member

[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 次)

發佈留言

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

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