当前位置: 首页 > 知识库问答 >
问题:

使用EclEmma不扫描异常方法的Java代码覆盖率

欧桐
2023-03-14

我正试图使用Eclipse和EclEmma在java中覆盖我的代码。

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

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

EclEmma说测试失败是因为抛出了一个IllegalArgumentExc0019。所以它会丢弃我的代码覆盖率指标,即使它应该抛出一些东西。有没有一个选项可以让它看到JUnit期望的异常标签

编辑:我发现,如果您将抛出添加到测试声明中,它也可以工作!

共有3个答案

谢俊悟
2023-03-14

我面临着同样的问题,并提出了一个请求,以解决造成这种烦恼的最主要原因。我只处理方法调用的操作码,而不是添加太多的探测。换句话说,由方法调用引发的异常(以前)导致的错误覆盖率结果问题得到了解决,但如果异常是由除零、错误的强制转换或数组索引问题引发的,则不会得到解决。

https://github.com/jacoco/jacoco/pull/261

请随意评论pull请求或参与我在JaCoCo邮件列表上开始的讨论。

曾宏毅
2023-03-14

目前还不能发表评论,但我想指出,关于公认的答案,有一个非常好的理由要注意测试代码的覆盖范围。

使用JUnit很容易搞乱测试方法命名约定,或者忘记@test注释,这取决于JUnit版本。如果这样做,你很容易就会被愚弄,以为你的绿色实心条意味着你刚刚添加的漂亮测试通过了,而实际上它从未运行过。覆盖着色将非常显著地显示这一点。当然,正如这篇文章所指出的,一些抛出异常的测试可能看起来好像没有运行。

沈思博
2023-03-14

不,没有办法让EclEmma注意到预期的子句。他们在这里承认这个事实。

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

具有预期异常的JUnit4测试用例显示为未涵盖,即使它们已执行。原因是底层JaCoCo代码覆盖率库仅在执行某些探测时才将代码视为已执行。对于标记为@test{expected=…}的成功测试用例 事实并非如此。

就我个人而言,我不会太担心。对测试用例的覆盖是EclEmma能告诉你的最不有趣的事情;我总是完全忽略这些指标,只关注生产代码的覆盖范围。

 类似资料:
  • 问题内容: 我正在尝试使用Eclipse和EclEmma在Java中进行代码覆盖。 我的测试使用的是JUnit 4,我有一些类似的测试: EclEmma说测试失败,因为抛出了IllegalArgumentException。因此,即使它应该抛出某些东西,它也会丢弃我的代码覆盖率指示器。是否有使其看到JUnit预期异常标记的选项? 编辑:我发现,如果您也将throw添加到测试的声明中,则可以正常工作

  • 我是jUnit的新手,我试图加深我对它的了解。我在网上搜索了一下,但没有找到任何可以解决几个疑问的东西。 这是代码: 这是jUnit4测试用例: TestCase运行正常,没有任何问题,但我有两个简单的问题/问题: 1) 只测试方法的正确功能是正确的,还是应该同时测试值和/或任何特定异常? 2) 当我用EclEmma运行代码覆盖率时,它给了我75%的代码覆盖率,因为测试用例没有测试类的构造函数。测

  • 我不熟悉java、Junit和jacoco。我正在做下面的异常处理。我也在捕获异常类,以防该方法抛出之前未捕获的任何其他异常。 在Junit测试中,尝试如下。当我有运行时的任何异常时,我抛出的总是运行时异常捕获块本身,除非我抛出异常。我可以尝试其他哪个选中的异常,使其进入异常捕获块。因此,我无法获得所需的代码覆盖率。 谢谢你的帮助。

  • 问题内容: 因此,这是该书的引文: 覆盖方法不得抛出比被覆盖方法声明的异常新的或更广泛的检查异常。例如,声明FileNotFoundException的方法不能被声明SQLException,Exception或任何其他非运行时异常的方法覆盖,除非它是FileNotFoundException的子类。 现在这是我的问题,如果超类中的方法引发异常,那么重写方法可以根本不引发异常吗? 因为我只是在Ja

  • 我已经尝试过了,但没有找到任何可以理解的解决方案(我对java非常陌生,这对我来说很难),或者自己解决它。以下是完整的代码(我知道代码不是那么高效): 正如您所看到的,我试图自己解决它,甚至在一些代码上添加了注释,但当它运行到方法并返回时,它失败了,因为扫描器认为在我写东西之前有东西要扫描。这里有个例外-

  • 问题内容: 我已经配置了EclEmma,使其无法正常运行我的单元测试。但是,编辑器仍会突出显示未涵盖的测试代码。我不希望单元测试中突出显示,因为它们没有检测到覆盖率。我怎样才能做到这一点? 问题答案: 我做了以下步骤: 转到 “首选项”- >“ Java”->“代码覆盖率”,然后 将 “仅路径条目匹配” 选项设置为 看来效果很好。