关于单元测试:当方法中的代码被emma覆盖时,为什么未显示该方法调用?

关于单元测试:当方法中的代码被emma覆盖时,为什么未显示该方法调用?

Why is a method call shown as not covered when the code within the method is covered with emma?

我正在编写一个单元测试,以检查私有方法是否将关闭流。

单元测试调用methodB,并且变量something为null

单元测试不会模拟测试中的类

私有方法在我正在调用的公共方法中。

在eclipse中使用emma(通过eclemma插件),即使方法中的代码是

例如

1
2
3
4
5
6
7
8
9
10
public methodA(){

    if (something==null) {
        methodB(); //Not displayed as covered
    }
}

private methodB(){
    lineCoveredByTest; //displayed as covered
}

为什么方法调用不会被突出显示为已覆盖?


我发现EMMA的eclipse插件有很多bug,并且与您描述的插件有相似的经验。 最好单独使用EMMA(如果需要,可以通过ANT)。 确保始终重新生成EMMA生成的元数据文件,以避免合并混乱(我怀疑这是eclipse插件的问题)。


我假设当您说"单元测试调用methodB()"时,您的意思不是直接通过methodA()

那么,是否可能通过其他单元测试或methodC()在其他地方调用methodB()


推荐阅读