Java 测试覆盖率:如何覆盖断言?

Java 测试覆盖率:如何覆盖断言?,java,code-coverage,assert,eclemma,Java,Code Coverage,Assert,Eclemma,编辑:看来这个bug的链接是正确的。启用断言后,编译器将生成额外的代码。最后创建了一个额外的不可访问分支 我的一个方法构造函数具有这些断言 public Board(int w, int h) { assert w >= 0 : "PRE1: width should be >= 0 but is " + w; assert h >= 0 : "PRE2: height should be >= 0 but is "

编辑:看来这个bug的链接是正确的。启用断言后,编译器将生成额外的代码。最后创建了一个额外的不可访问分支

我的一个方法构造函数具有这些断言

   public Board(int w, int h) {
            assert w >= 0 : "PRE1: width should be >= 0 but is " + w;
            assert h >= 0 : "PRE2: height should be >= 0 but is " + h;
    }
我试着通过这样做来掩盖它

public void testInvalidBoardWidth() {
    try {
        Board badBoard = new Board(-2, 2);
        fail();
    } catch (AssertionError err) {
        assertTrue(true);
    }
}

@Test
public void testFailBoardHeight() {
    try {
        Board InvalidBoard = new Board(2, -4);
        fail();
    } catch (AssertionError err) {
        assertTrue(true);
    }
还有价值观

板(-4,2)
板(2,2)


因此,我已经测试了断言和传递失败的地方。如果我没有弄错的话,它涵盖了所有情况,但是使用代码覆盖工具eclemmaeclipse插件,它声称它没有完全涵盖。我已经在eclipse的coverage参数中有了
-ea
,因此启用了断言。我的测试是否不完整,或者断言是否不能完全覆盖?谢谢。

是的,你已经把一切都办妥了。这里只有3条路径:

  • w<0&h>0
  • h<0&w>0
  • w>0&h>0
您可以添加w<0&h<0,但这不会有更高的分支覆盖率

我认为第四个“分支”发生在未启用断言时

几年来,我一直认为真正的100%保险是不可能的。除此之外,还有私有构造函数(防止只包含静态方法和字段的类的实例化)和一些关于泛型类的神秘信息(对我来说)。可能还有其他情况

然而,最近我对这种接受感到不满

虽然我的大部分专业经验都是在软件设计和开发方面,但我在硬件设计方面做得很好。我们有“覆盖”工具(实际上是可测试性),我个人将公司内芯片和模块的可接受可测试性标准从90%和80%分别提高到近100%和97%。(关于几年后的一场对抗,有一个有趣的故事——“那么你就是那个人!”——但这并没有什么密切关系。)本文的背景只是为了说明为什么我发现在纯软件设计和开发中,不到100%的覆盖率是不可接受的。软件是完全确定的,不像硬件,在硬件中可能会发生物理变化

最近我遇到一个提示,JUnit套件测试可能包括一个未启用断言的测试。我没有时间跟进此事

泛型类的覆盖范围可以通过包含一个原始的实例化测试来实现

不知道如何处理私有构造函数


希望这能有所帮助。

艾玛说的哪一部分不是covered@JeffStorey它说,董事会报告中的上述两项主张没有完全涵盖在内。它们仍然是黄色的,看起来被遮住了。你看到这个虫子了吗