Java 测试JUnit和EclEmma时遗漏了分支

Java 测试JUnit和EclEmma时遗漏了分支,java,unit-testing,junit,code-coverage,Java,Unit Testing,Junit,Code Coverage,我正在使用EclEmma测试我编写的测试类(junittesting)的覆盖率。我使用-ea启用了Java中的断言。在运行覆盖率测试后,我使用了Java断言(在实际代码中,当然不是测试代码中),它说x分支y遗漏了。我怎样才能覆盖所有的树枝?我做错什么了吗 我想您是在问,为什么禁用断言时覆盖率较低? 这是因为编译器为断言插入了新的分支。考虑这个例子: assert x > 0; 编译器将插入与 if (assertions are enabled) { if ( ! x >

我正在使用EclEmma测试我编写的测试类(junittesting)的覆盖率。我使用
-ea
启用了Java中的断言。在运行覆盖率测试后,我使用了Java断言(在实际代码中,当然不是测试代码中),它说
x
分支
y
遗漏了。我怎样才能覆盖所有的树枝?我做错什么了吗

我想您是在问,为什么禁用断言时覆盖率较低? 这是因为编译器为断言插入了新的分支。考虑这个例子:

assert x > 0;
编译器将插入与

if (assertions are enabled) {
    if ( ! x > 0 )
        throw new AssertionViolatedException()
    }
}

这会将分支添加到代码中,当您打开断言时,这些分支都不会执行。这会降低覆盖率,但这没什么大不了的,因为这是指编译器生成的代码。

如果没有断言,工作正常吗?如果我关闭Java断言,那么当我删除-ea参数时,覆盖率会低很多。我的测试类涵盖了所有内容,除了用黄色显示的Java断言和我在问题中陈述的消息。问题是关于何时启用断言。我的问题是,为什么我的测试代码没有分支。如果启用了断言,就会发生这种情况。好的,请重新表述您的问题,以便我能理解。您可以使用“-ea”标志运行测试。会发生什么?然后,运行测试时不带“-ea”标志。会发生什么?