【问题标题】:Intellij compare two coverage dataIntellij 比较两个覆盖数据
【发布时间】:2014-01-13 12:43:52
【问题描述】:

我有两个 java 测试用例,它们测试非常相似的功能。使用 IntelliJ 的覆盖率报告,可以有两个人看到每个测试的源代码覆盖率。

现在我想看看这两个测试之间的区别。示例

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

测试用例 1:

  foo(1);

测试用例 2:

  foo(5);

现在我想让 IntelliJ 告诉我 'print("hu")' 仅由 testcase1 调用。我如何做到这一点?

【问题讨论】:

  • 手动解决方法如下:将覆盖结果导出到 html 并在浏览器中逐步比较每个包。

标签: java testing intellij-idea code-coverage


【解决方案1】:

你可以找到方法的调用者

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

【讨论】:

  • 好主意,但不能解决我的问题。也许两个测试都调用相同的方法(这意味着没有区别),但我需要知道路径执行(包括所有 if 分支)是否不同。
  • @EhmKa 看看我的例子。它工作正常,您可以根据需要使用它。现在你可以说你的方法从methodA
  • @Rucheria 我的问题是我不知道不同的执行路径。因此,我不能将您给定的示例放入每个可能的执行路径中,因为有很多。
猜你喜欢
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 2019-07-21
  • 2011-11-28
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
相关资源
最近更新 更多