2011-08-10 96 views
3

我有一種情況,我需要知道從單個JUnit測試中調用了哪些方法。舉例來說,如果我有以下的僞代碼:執行Java單元測試期間的方法調用列表

public class UnitTest {  
    public main() { 
    Circle c = new Circle() 
    c.getArea() 
    } 
} 

public class Circle { 
    public Circle() { 
    ... 
    }  
    public getArea() { 
    ... 
    getRadius() 
    } 
    private getRadius() { 
    ... 
    } 
} 

單元測試類的方法調用按照這個順序(雖然我的目的,我並不需要維持秩序,或知道的呼叫者的方法):

    1. UnitTest.main
    2. Circle.Circle
    3. Circle.getArea Circle.getRadius

    本質上,我想知道在JUnit測試中實際正在執行的程序的哪一部分。我想我可以動態地看出這一點,但我無法找到工具或方法。我發現的一些工具的主要問題是它們通常非常直觀(需要用戶交互才能提取所需的數據)。我正在尋找的東西,只給了我的方法列表(XML,文字等...)沒有GUI方面。最後,我試圖通過腳本方法爲測試套件自動化。

    我想使用將任一方法:

    • 使用Java代理在每一個方法調用打印出class.method
    • 跟蹤使用方面

    如果有一個工具,它已經這樣做了,這將是巨大的。如果沒有,看起來我正在按照我指定的方法解決我的問題。

    任何幫助/建議,將不勝感激。

    UPDATE,解決 我決定用艾瑪用下面的命令來提取的方法調用(只需要一個多0%的覆蓋率任何方法分析報告)的信息:

    emmarun -r xml     // To output to XML 
        -Dreport.sort=-method  // Sort method coverage in descending order 
        -Dverbosity.level=silent  // Minimize script output 
        -Dreport.metrics=method:1 // Flag any method with a 0% coverage 
        -Dreport.columns=method,name // Only show the method and name columns 
        -Dreport.depth=method  // Consider the data of method coverage 
    
  • 回答

    2

    是你在尋找一個「Coverage」工具,如EmmaCobertura

    +0

    我確實考慮過一個覆蓋工具(目前我正在看Emma試圖判斷我是否可以輕鬆地從報告中提取所需的信息)。儘管如此,我仍然試圖找到一個更簡單的解決方案。必須有一些簡單的方法來提取正在運行的程序的方法調用列表。 –

    +0

    Emma和Cobertura可以將結果導出爲包含類和方法名稱的XML,還是我誤解了您的需求? –

    +0

    在看了艾瑪之後,我確信我可以從XML文件中獲取所有必需的信息。 –

    1

    如果您想知道您的測試 調用了哪些方法,您可以使用代碼覆蓋率工具,如coberturaemma

    它們都提供了與maven,ant和eclipse 的完美集成,並且可以生成xml或html報告。