2014-01-13 58 views
0

我有兩個測試非常類似功能的java測試用例。有了IntelliJ的覆蓋率報告,有可能兩個看到每個測試的源代碼覆蓋率。Intelij比較兩個覆蓋率數據

現在我想看看兩個測試之間的區別。例如

void foo(a) { 
if (a>4) { print("hu"); }} 

測試用例1:

foo(1); 

測試用例2:

foo(5); 

現在我想的IntelliJ告訴我, '打印( 「胡」)' 只能由testcase1調用。我如何實現這一目標?

+0

手動解決方法是這樣的:導出覆蓋率結果HTML和比較在瀏覽器中每一步一步包。 – EhmKah

回答

0

您可以找到方法

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); 

StackTraceElementgetClassName()的來電者,並getMethodName()巫婆幫助你找到主叫方。

例:

public class A { 
public void foo(int a) { 
    if (a > 4) { 
     System.out.println("hu"); 
     StackTraceElement[] stackTraceElements = Thread.currentThread() 
                   .getStackTrace(); 
     System.out.println(stackTraceElements[2].getMethodName()); 
     } 
    } 

class Result { 
public static void main(String[] args) { 
    methodA(); 
} 

public static void methodA(){ 
    new A().foo(5); 
} 

public static void methodB(){ 
    new A().foo(2); 
} 
} 
} 

輸出地說:

hu 
methodA 
+0

不錯的主意,但不能解決我的問題。也許兩個測試調用相同的方法(這意味着沒有區別),但我需要知道路徑執行(包括所有if分支)是否有所不同。 – EhmKah

+0

@EhmKa看看我的例子。它工作正常,你可以使用它來滿足你的需要。現在你可以說你的方法調用'methodA' –

+0

@Rucheria我的問題是,我不知道不同的執行路徑。所以我不能把你的例子放到每個可能的執行路徑中,因爲有很多。 – EhmKah