如何提取分支决策的布尔值?

How to extract the boolean value of the branch decision?

我目前正在开展一个项目,我需要在其中 运行 JUnit 测试用例,然后从目标 Class 中提取信息(class 正在测试)。为了提取所涵盖的语句,我使用了 eclEmma,但使用此工具我只能提取在 运行 测试 class.

之后在 Target 中执行的行号

我想提取 if 语句中分支决策的布尔值,以得出在覆盖目标 Class 的特定 true/false 分支时验证哪些条件。

我知道我可以使用Java解析器解析Java文件,然后提取以下信息,但我不确定如何提取分支决策的布尔值。

public void visit(IfStmt stmt, Void arg) 
    {
        System.out.println(stmt.getCondition());
        System.out.println(stmt.getElseStmt());
        System.out.println(stmt.getThenStmt());
        super.visit(stmt, null);
    }

您的方法是正确的:您可以在 IfStmt 上使用访问者,就像您所做的一样,并且您想要提取条件(这是括号中显示的值),因此您会得到:

public void visit(IfStmt stmt, Void arg) {
    System.out.println(stmt.getCondition());
    super.visit(stmt, null);
}

那我不知道你想用它做什么:你可以打印代码,当然或者你可以进一步分析它。

免责声明:我是 JavaParser 贡献者

EclEmma 基于 JaCoCo code coverage library 并简单地将其集成到 Eclipse 中,实际工作(检测和分析)由 JaCoCo 执行。

JaCoCo 分析的是字节码,而不是源代码。源代码仅用于可视化字节码分析的结果(通过突出显示进行装饰)。字节码仅包含有关行的信息,因此不幸的是,将字节码分支映射回源代码并不是一项微不足道的任务,并且与源代码的解析没有太多共同之处。这就是 JaCoCo 没有提供开箱即用的原因。然而,一些实验性的工作已经在这个主题上完成了。查看以下链接了解更多详情:

欢迎对 JaCoCo 做出贡献,因此如果有人能够可靠地实现此类映射 - 请毫不犹豫地回馈。