0

我想从我的单元测试中创建报告而不运行它们。我只想分析测试源代码并检查调用了哪些方法。在我的测试中,我使用 JUnit,Arquillian。我在外部服务器上运行它们,但在使用 arquillian-jacoco 扩展时遇到了问题。检测应用程序无法正常启动后。有没有提供这种功能的工具?

4

3 回答 3

2

代码覆盖率不仅仅与调用哪些方法有关。它更深入并检查方法中的哪些行在您的测试用例中被覆盖(实际执行)。

因此,与其说简单地将方法调用作为代码的一部分,不如说更多的是任何执行流程是否实际调用该方法。而且,执行流程主要取决于测试用例的输入。因此,除非您运行它们,否则代码覆盖工具在这里几乎毫无头绪。

假设,您有一些代码,例如

if (size > 0) {
    this.array = new Integer[size];
} else {
    String msg = "Input size must be > 0";
    logAndThrow(msg, new IllegalArgumentException(msg));
}

现在,您实际上所说的是视为logAndThrow()已覆盖,除非您有一些测试用例来测试此类,否则肯定不是这种情况size <= 0

于 2013-06-26T07:39:13.783 回答
1

虽然已经有了很好的答案,但我想补充一点,很多事情不能简单地在编译时确定,因此只能在运行时确定。多态性就是一个很好的例子。

于 2013-06-26T08:02:42.610 回答
0

通过静态分析,基本上可以通过从每个单元测试中分割代码来获得代码覆盖率,而无需执行代码。请参阅技术论文Static Estimation of Test Coverage

话虽如此,我认为目前没有任何生产工具可以实现这个想法。

于 2013-06-26T10:53:40.920 回答