我的團隊最近的一場辯論讓我感到驚訝。基本的主題是功能/集成測試應該包括多少和什麼內容(當然,它們不是一樣的,但是這個例子在沒有關係的情況下是假的)。集成測試,但多少?
比方說,你有一個「控制器」類類似:
public class SomeController {
@Autowired Validator val;
@Autowired DataAccess da;
@Autowired SomeTransformer tr;
@Autowired Calculator calc;
public boolean doCheck(Input input) {
if (val.validate(input)) {
return false;
}
List<Stuff> stuffs = da.loadStuffs(input);
if (stuffs.isEmpty()) {
return false;
}
BusinessStuff businessStuff = tr.transform(stuffs);
if (null == businessStuff) {
return false;
}
return calc.check(businessStuff);
}
}
我們需要很多的單元測試是肯定的(例如,如果驗證失敗,或在DB沒有數據,...),這是沒有問題的。
我們的主要問題,並就我們不能同意的是,有多少集成測試應覆蓋它:-)
我在,我們應少集成測試(測試金字塔)瞄準的一側。從這裏我將介紹的僅僅是一條從最後一行返回執行的快樂不快樂的路徑,只是爲了看看我是否將這些東西放在一起,它不會炸燬。
問題是,說明爲什麼測試結果是錯誤的,這使得一些人對此感到不安(例如,如果我們只檢查返回值,它是隱藏的該測試是綠色的,因爲有人更改了驗證,並返回false)。當然,是的,我們可以涵蓋所有的情況,但這將是一個沉重的矯枉過正的事情。
有沒有人有這種問題的經驗法則?還是推薦?讀?談論?博客文章?有關該主題的任何內容?
非常感謝!
PS:Sry爲醜陋的例子,但它很難將特定的代碼部分翻譯爲一個例子。是的,人們可以爭論拋出異常/使用不同的返回類型/等。但由於外部依賴性,我們的手或多或少地受到約束。
我正在投票結束這個題目,因爲這屬於http://softwareengineering.stackexchange.com/。然而,這是一個很好的問題! – Freiheit
我不同意擱置,因爲我詢問了一些參考資料(文章,隱藏在Google上的神奇馬丁福勒卷軸,關於上述情況的具體着作等)。無論如何,我會將問題添加到se.so.com並將鏈接留在此處。 – rlegendi