Java中的代码覆盖与EclEmma不扫描期望异常方法

Pac*_*ane 18 java eclipse junit unit-testing eclemma

我正在尝试使用Eclipse和EclEmma在java中获取代码覆盖率.

我的测试是使用JUnit 4,我有一些看起来像这样的测试:

    @Test(expected = IllegalArgumentException.class)
    public void createTime_withInvalidMinuteUnder0_throws(){
    //Arrange
    ...
    //Act
    Something triggering IllegalArgumentException Here       
}
Run Code Online (Sandbox Code Playgroud)

并且EclEmma说测试失败了,因为抛出了IllegalArgumentException.因此它会丢弃我的代码覆盖率指标,即使它应该抛出一些东西.有没有选项让它看到JUnit预期的异常标记?

编辑:我发现如果你把测试添加到测试声明中,它就可以了!

Dun*_*nes 21

不,没有办法让EclEmma注意到这个expected条款.他们在这里承认这一事实.

为什么JUnit4测试用例的预期异常显示为未涵盖?

具有预期异常的JUnit4测试用例即使已执行也显示为未涵盖.原因是底层的JaCoCo代码覆盖库仅将代码视为在执行某些探测时执行的代码.对于成功的测试用例,情况@Test{expected=...}并非如此.

就个人而言,我不会太担心它.测试用例的覆盖范围是EclEmma可以告诉你的最不值得的事情; 我总是完全忽略这些指标,并专注于我的生产代码的覆盖范围.

  • EclEmma可以告诉我什么更有趣的事情? (4认同)

And*_*wry 5

还不能发表评论,但我想指出,关于已接受的答案,有充分的理由关注测试代码的覆盖率。

根据您的 JUnit 版本,使用 JUnit 可以轻松搞砸测试方法命名约定或忘记 @Test 注释。这样做,您很容易被愚弄,认为您的实心绿色条意味着您刚刚添加的不错的测试通过了,而实际上它从未运行过。Coverage 着色将非常突出地显示这一点。当然,正如该线程指出的那样,您的一些抛出异常的测试可能看起来好像没有运行。