清單 英鎊 Pound 乘法的兩個測試用例
@Test
public void multiplyPoundsByInteger () {
assertEquals( new Pound()times()getAmount() );
assertEquals( new Pound()times()getAmount() );
}
但是此時您可能又會發現這兩個測試用例還是很有限您所希望的是測試所有的整數而不只是 和 這些只是您所想要的測試的數據的子集兩個測試用例並不能完全與您所想要測試的代碼的行為相等價您需要更多的測試用例此時就會發現需要很多的額外工作來編寫這些測試用例更可怕的是您會發現您需要測試用例的並不只是簡單的幾個可能是成千上萬個甚至無窮個測試用例才能滿足等價您的代碼行為的目的
很自然的您會想到用清單 所示的代碼來表達您的測試思想
清單 使用變量輔助編寫測試用例
//利用變量來代替具體數據表達測試思想
public void multiplyAnyAmountByInteger(int amount int multiplier) {
assertEquals( amount * multiplier
new Pound( amount )times( multiplier )getAmount() );
}
利用清單 的 multiplyAnyAmountByInteger 方法可以輕松將測試用例改寫成如清單 所示
清單 改寫的英鎊 Pound 乘法的測試用例
@Test
public void multiplyPoundsByInteger () {
multiplyAnyAmountByInteger( );
multiplyAnyAmountByInteger( );
}
如清單 所示以後若想增加測試用例只要不停調用 multiplyAnyAmountByInteger 方法並賦予參數值即可
方法 multiplyAnyAmountByInteger 就是一個理論的簡單例子理論就是一個帶有參數的方法其行為就是對任何參數都是正常的返回不會拋出斷言錯誤和其它異常理論就是對一組數據進行概括性的陳述就像一個科學理論一樣如果沒有對所有可能出現的情況都進行實驗是不能證明該理論是正確的但是只要有一種錯誤情況出現該理論就不成立相反地一個測試就是對一個單獨數據的單獨陳述就像是一個科學理論的實驗一樣
如何使用理論機制
在 JUnit 的理論機制中每個測試方法不再是由注釋 @Test 指定的無參測試函數而是由注釋 @Theory 指定的帶參數的測試函數這些參數來自一個數據集(data sets)數據集通過注釋 @DataPoint 指定
JUnit 會自動將數據集中定義的數據類型和理論測試方法定義的參數類型進行比較如果類型相同會將數據集中的數據通過參數一一傳入到測試方法中數據集中的每一個數據都會被傳入到每個相同類型的參數中這時有人會問了如果參數有多個而且類型都和數據集中定義的數據相同怎麼辦?答案是JUnit 會將這些數據集中的數據進行一一配對組合(所有的組合情況都會被考慮到)然後將這些數據組合統統通過參數一一傳入到理論的測試方法中但是用戶可以通過假設機制(assumption)在斷言函數(assertion)執行這些參數之前對這些通過參數傳進來的數據集中的數據進行限制和過濾達到有目的地部分地將自己想要的參數傳給斷言函數(assertion)來測試只有滿足所有假設的數據才會執行接下來的測試用例任何一個假設不滿足的數據都會自動跳過該理論測試函數(假設 assumption 不滿足的數據會被忽略不再執行接下來的斷言測試)如果所有的假設都滿足測試用例斷言函數不通過才代表著該理論測試不通過
[] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/Java/ky/201311/29103.html