1

编辑:所以看起来 JeffStorey 链接到错误是正确的。启用断言后,编译器将生成额外的代码。最终创建了 1 个额外的无法访问的分支。

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

   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);
    }

再次与价值观

Board (-4 , 2)Board (2, 2)

因此,我测试了断言和通过的失败之处。如果我没记错的话,它涵盖了所有情况,但是使用代码覆盖工具 eclEmma Eclipse 插件它声称它没有被完全覆盖。我已经有-eaeclipse 的覆盖参数,因此启用了断言。我的测试是否不完整,或者断言不能被完全覆盖?谢谢。

4

2 回答 2

3

我相信第四个“分支”发生在未启用断言时。

几年来,我一直认为真正的 100% 覆盖是不可能的。除了这种情况,还有私有构造函数(以防止实例化只有静态方法和字段的类)和一些关于泛型类的神秘(对我来说)。可能还有其他情况。

于 2015-05-01T03:25:23.720 回答
0

是的,你已经涵盖了一切。这里只有3条路径:

  • w < 0 & h > 0
  • h < 0 & w > 0
  • w > 0 & h > 0

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

于 2013-10-31T02:33:22.207 回答