注:我知道active_
在我的例子中可能是「任何東西」。這不是這個問題的關鍵。這是關於使一個「未定義的值」可靠地通過單元測試。TDD:給定測試成員初始化,給定C++中未定義的行爲
編輯:從「no constructor」改爲「empty constructor」。
我正在研究C++類,並使用TDD。現在我想確保一個bool
類成員被正確初始化 - 一個值在構造函數中賦值給它。所以我寫了下面的測試(使用谷歌模擬/谷歌測試框架):
TEST(MyClass, isNotActiveUponCreation) {
MyClass my;
ASSERT_FALSE(my.isActive());
}
和下面的類定義:
class MyClass {
public:
// Note: Constructor doesn't initialize active_
MyClass() {}
bool isActive() const { return active_; }
private:
bool active_;
};
問題:在我的機器,這種測試目前總即使active_
從未初始化。現在我們知道active_
的值是未定義的,因爲它是一個原始類型並且從未初始化。所以從理論上講,在某些時候可能是true
,但最後不可能知道。底線是,我不能可靠地測試使用這種方法缺少初始化。
有沒有人有一個想法,我怎麼可能以確定性和可重複性的方式來測試這種情況?或者我必須忍受它,省略這種測試,並希望我永遠不會忘記初始化一個布爾成員,或者其他測試總會產生缺陷?
在構造函數中初始化該變量,否則可將其設置爲任何值。 –
@RetiredNinja是的,我知道。但我想要的是確保構造函數設置它 - 使用TDD。所以我正在尋找一種方式讓我的測試可靠地失敗,以防'active_'被設置爲「任何東西」。我添加了一個註釋,以使其更清晰。 –
只是一個想法,不是一個真正的答案:如果創建一個包含100個MyClass對象的std :: vector,該怎麼辦?那麼每個對象的'active_'都是false? – TobiMcNamobi