为什么代码覆盖率有时会计算方法名称或右括号?

米哈尔·楚迪(Michal Chudy)

为什么这些行,例如方法定义(带有修饰符,方法名称,参数等的行)或右括号有时会计入行覆盖范围?

例1

在此特定示例中,它是一个构造函数方法,但并非总是这样:

例2

你能解释一下吗?

苏贝

这取决于您所使用的覆盖率工具,但是我已经看到一些与您的结果相符的工具。

据我所知,原因是抛出/提前返回vs到达函数的结尾。

请注意,只有带有突出显示的右括号的方法不会返回(任何东西),而是从函数的末尾运行,然后触摸该右括号(以及可能在此处发生的堆栈弹出)。与构造函数相同,该构造函数不会在函数内的任何位置显式返回。

在其他示例中,最后高亮显示的行是执行离开函数的位置。

您可以通过设置一种可以早日返回的方法并在收集覆盖率时仅测试该情况来非常容易地进行测试。用覆盖率测试另一种情况(最后结束),然后将两者进行比较。希望第二个显示突出显示的右括号。

例如:

public class EarlyReturn {
    public static void whatHappens(final Boolean path) {
        System.out.println("Entering method...");

        if (path == null) {
           throw new IllegalArgumentException("Must have a path.");
        } else if (path) {
            System.out.println("Exiting early...");
            return;
        }

        System.out.println("Exiting normally...");
    }
}

和:

@RunWith(JUnit4.class)
public class TestEarlyReturn {
    @Test
    public void testEarly() {
        EarlyReturn.whatHappens(true);
    }

    @Test
    public void testNormal() {
        EarlyReturn.whatHappens(false);
    }

    @Test(expected = IllegalArgumentException.class)
    public void testThrow() {
        EarlyReturn.whatHappens(null);
    } 
}

您没有提到行/分支覆盖率指标,但是在您的示例中,所有情况下的覆盖率都应为100%(我希望如此)。当然,这仍然取决于工具及其采样方式。我的示例不应具有100%的线路覆盖率,除非您同时运行两个测试。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么代码覆盖率有时会计算方法名称或右括号?

来自分类Dev

当代码有效时,为什么 JQuery .val() 方法有时会返回 undefined?

来自分类Dev

为什么在MongoDB中覆盖查询有时会变慢?

来自分类Dev

为什么Clang有时会返回nullptr,有时会返回我想要的?

来自分类Dev

为什么有时会看到Java包名称与文件夹结构不同?

来自分类Dev

为什么有时会看到Java包名称与文件夹结构不同?

来自分类Dev

为什么我的计算机有时会启动得更快或更慢?

来自分类Dev

为什么powershell(ise)有时会打印出我执行的代码?

来自分类Dev

为什么这个多线程代码有时会打印6?

来自分类Dev

为什么此代码有时会产生不同的输出?

来自分类Dev

为什么这段代码通常可以工作,但有时会产生 Segmentation Fault?

来自分类Dev

为什么Vim有时会创建.swp文件?

来自分类Dev

为什么结帐有时会暂存文件?

来自分类Dev

为什么整数属性有时会返回0?

来自分类Dev

为什么导航属性有时会返回null?

来自分类Dev

为什么有时会出现细分错误?

来自分类Dev

为什么后台进程有时会自发停止?

来自分类Dev

为什么registerForRemoteNotificationTypes有时会失败?

来自分类Dev

为什么有时会显示隐藏的表单失火?

来自分类Dev

为什么“少”有时会忘记其历史

来自分类Dev

为什么有时会跳过input.next()?

来自分类Dev

人们为什么有时会声明数组大小?

来自分类Dev

应用商店:为什么有时会有开发商名称和卖方名称

来自分类Dev

应用商店:为什么有时会有开发商名称和卖方名称

来自分类Dev

为什么我的比较方法有时会抛出IllegalArgumentException?

来自分类Dev

为什么有时会出现“工作表类的粘贴方法失败”的情况?

来自分类Dev

方法有时会捕获org.hibernate.exception.JDBCConnectionException,为什么?

来自分类Dev

为什么在方法中使用require_once有时会失败?

来自分类Dev

为什么 index 有时会在 reduce() 方法中意外运行?

Related 相关文章

  1. 1

    为什么代码覆盖率有时会计算方法名称或右括号?

  2. 2

    当代码有效时,为什么 JQuery .val() 方法有时会返回 undefined?

  3. 3

    为什么在MongoDB中覆盖查询有时会变慢?

  4. 4

    为什么Clang有时会返回nullptr,有时会返回我想要的?

  5. 5

    为什么有时会看到Java包名称与文件夹结构不同?

  6. 6

    为什么有时会看到Java包名称与文件夹结构不同?

  7. 7

    为什么我的计算机有时会启动得更快或更慢?

  8. 8

    为什么powershell(ise)有时会打印出我执行的代码?

  9. 9

    为什么这个多线程代码有时会打印6?

  10. 10

    为什么此代码有时会产生不同的输出?

  11. 11

    为什么这段代码通常可以工作,但有时会产生 Segmentation Fault?

  12. 12

    为什么Vim有时会创建.swp文件?

  13. 13

    为什么结帐有时会暂存文件?

  14. 14

    为什么整数属性有时会返回0?

  15. 15

    为什么导航属性有时会返回null?

  16. 16

    为什么有时会出现细分错误?

  17. 17

    为什么后台进程有时会自发停止?

  18. 18

    为什么registerForRemoteNotificationTypes有时会失败?

  19. 19

    为什么有时会显示隐藏的表单失火?

  20. 20

    为什么“少”有时会忘记其历史

  21. 21

    为什么有时会跳过input.next()?

  22. 22

    人们为什么有时会声明数组大小?

  23. 23

    应用商店:为什么有时会有开发商名称和卖方名称

  24. 24

    应用商店:为什么有时会有开发商名称和卖方名称

  25. 25

    为什么我的比较方法有时会抛出IllegalArgumentException?

  26. 26

    为什么有时会出现“工作表类的粘贴方法失败”的情况?

  27. 27

    方法有时会捕获org.hibernate.exception.JDBCConnectionException,为什么?

  28. 28

    为什么在方法中使用require_once有时会失败?

  29. 29

    为什么 index 有时会在 reduce() 方法中意外运行?

热门标签

归档