讓我們假設下面的Java類創建JUnit測試:在Eclipse工作區涵蓋其所有調用的方法
class MyClass {
public String methodA(String data, String expression) {
// expression is evaluated using data
// ...
// this leads to a result which is returned
return result;
}
}
注意,那expression
是一種表達式語言(DSL)的一個實例。因此,使用data
的expression
的評估取決於兩者的組合。通常,expression
是一個固定值,不會經常變化,並且data
可以在所有調用中更改。
好吧,某個時候以後在MyClass.methodA(String,String)
中發現了一個錯誤。該錯誤駐留在某些基礎類中,僅發生在expression
和data
的某些特殊組合中。 JUnit測試很容易爲這種特殊情況編寫,並且可以修復。
不幸的是,這種方法在整個項目中都經常使用。 Eclipse調用層次結構標識了使用此方法的其他多個方法。我現在擔心迴歸,如果我只是應用bugfix。爲了感覺更安全,我想做一些迴歸測試。
通常,單元測試應該考慮所有重要的調用類型,特別是邊界情況。但是,由於expression
是一個可以變化很大的DSL,因此測試並不容易 - 涵蓋了所有潛在的使用情況。此外,這些測試不會識別依賴該錯誤的錯誤用法。
所以我的想法是通過以下方式進行:
找到這種方法的所有調用(如Eclipse中使用「呼叫層次」),並提取所有的值
expression
。爲
data
(例如,從數據庫)提取足夠多的實際值並使用原始版本MyClass.methodA(String,String)
交叉評估第一步中的所有表達式。將三元組(data, expression, result)
保存到一個文件。執行bugfix。
測試方法
MyClass.methodA(String,String)
使用上述文件來聲明結果沒有改變。
以下問題:
你覺得這個方法的?
在Eclipse中使用調用層次結構我只能複製和粘貼調用方法,但不能將確切的調用(包括參數)包含到剪貼板(參見步驟1)。我必須手動爲每個找到的方法複製調用調用。如何以便捷的方式提取調用(在完整的Eclipse工作區中,因此在多個項目中)?
恕我直言,我只測試一種單一的方法,因此測試只涵蓋一個單位。在第4步中使用JUnit還是有些更復雜的東西?
嗯,顯然沒有人真正給出一個更好的答案,我不得不承認,我傳播我的問題的答案,只是想獲得這種方法的一些反饋,我會選擇下面給出的唯一答案,因爲它恰恰印證我的看法。 – SimonTheSorcerer 2012-09-06 13:25:03