2013-09-30 67 views
3

我正在測試一組輸出樣式器類,它在將數據輸出到輸出接口之前對數據進行樣式設置。每個樣式器的行爲取決於多達5種不同的條件(目前,但第六種方式)正在輸出的對象:isKey,isDefault,isEmpty,isReadOnly,isAccessible具有大量相互依賴條件的單元測試代碼

因此,一個樣式器如果只讀數據可能不會輸出任何內容,而另一個可能會顯示「訪問被拒絕」。

目前我正在測試這些線條,但隨着更多條件的添加,測試爆炸。

{ 
    // isKey, isDefault, isEmpty, isReadOnly, isAccessible 
    ValueOutputTester::TestConditions conditions = {0, 0, 0, 0, 0}; 
    EXPECT_EQ(valueOutputTester(conditions), accessDeniedOutput); 
} 
{ 
    ValueOutputTester::TestConditions conditions = {0, 0, 0, 0, 1}; 
    EXPECT_EQ(valueOutputTester(conditions), normalOutput); 
} 
{ 
    ValueOutputTester::TestConditions conditions = {0, 0, 0, 1, 0}; 
    EXPECT_EQ(valueOutputTester(conditions), accessDeniedOutput); 
} 
{ 
    ValueOutputTester::TestConditions conditions = {0, 0, 0, 1, 1}; 
    EXPECT_EQ(valueOutputTester(conditions), accessDeniedOutput); 
} 
{ 
    ValueOutputTester::TestConditions conditions = {0, 0, 1, 0, 0}; 
    EXPECT_EQ(valueOutputTester(conditions), emptyOutput); 
} 
... 

你能推薦一個更好的方法嗎?

+0

如果所有這些都是布爾型標記,則最終會具有'2之間^(N-1)'和'2^N'測試,其中' n'是標誌的數量(但你可能已經知道了)。我假設你正在測試所有組合,因爲你使用'(0,0,0,1,1)'的測試。除了測試所有組合,您可以單獨測試每個標誌(最多測試2n個測試),然後添加相關組合。也有代碼來自動生成你的測試。 – Renan

回答

0

您可能會編寫一個測試幫助器方法,可以讓您指定條件模式並生成與模式匹配的所有組合,例如,假設-1表示 '0或1':

TestPattern pattern = {-1, -1, 1, -1, -1}; 
ExpectForPattern(pattern, emptyOutput);