2012-07-25 31 views
0

讓我們假設下面的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)的一個實例。因此,使用dataexpression的評估取決於兩者的組合。通常,expression是一個固定值,不會經常變化,並且data可以在所有調用中更改。

好吧,某個時候以後在MyClass.methodA(String,String)中發現了一個錯誤。該錯誤駐留在某些基礎類中,僅發生在expressiondata的某些特殊組合中。 JUnit測試很容易爲這種特殊情況編寫,並且可以修復。

不幸的是,這種方法在整個項目中都經常使用。 Eclipse調用層次結構標識了使用此方法的其他多個方法。我現在擔心迴歸,如果我只是應用bugfix。爲了感覺更安全,我想做一些迴歸測試。

通常,單元測試應該考慮所有重要的調用類型,特別是邊界情況。但是,由於expression是一個可以變化很大的DSL,因此測試並不容易 - 涵蓋了所有潛在的使用情況。此外,這些測試不會識別依賴該錯誤的錯誤用法。

所以我的想法是通過以下方式進行:

  1. 找到這種方法的所有調用(如Eclipse中使用「呼叫層次」),並提取所有的值expression

  2. data(例如,從數據庫)提取足夠多的實際值並使用原始版本MyClass.methodA(String,String)交叉評估第一步中的所有表達式。將三元組(data, expression, result)保存到一個文件。

  3. 執行bugfix。

  4. 測試方法MyClass.methodA(String,String)使用上述文件來聲明結果沒有改變。

以下問題

你覺得這個方法的?

在Eclipse中使用調用層次結構我只能複製和粘貼調用方法,但不能將確切的調用(包括參數)包含到剪貼板(參見步驟1)。我必須手動爲每個找到的方法複製調用調用。如何以便捷的方式提取調用(在完整的Eclipse工作區中,因此在多個項目中)?

恕我直言,我只測試一種單一的方法,因此測試只涵蓋一個單位。在第4步中使用JUnit還是有些更復雜的東西?

+0

嗯,顯然沒有人真正給出一個更好的答案,我不得不承認,我傳播我的問題的答案,只是想獲得這種方法的一些反饋,我會選擇下面給出的唯一答案,因爲它恰恰印證我的看法。 – SimonTheSorcerer 2012-09-06 13:25:03

回答

0

由於測試軟件的預期附加值是爲了覆蓋大多數情況下的最低成本和最大結果,我同意你的方法。

從軟件收集現實生活中的samplevalues並將它們保存到一個文件代表不應該是複雜的實現,似乎我來分析這件事的最佳方法。即使你必須手動複製它。

相關問題