我的一个方法构造函数有这些断言
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插件,它声称它没有完全覆盖。我已经在eclipse的覆盖参数中有-ea
,因此启用了断言。我的测试是不完整的,还是断言没有完全覆盖?感谢。
答案 0 :(得分:2)
我相信第四个"分支"在未启用断言时发生。
我已经接受了几年的真正100%报道是不可能的。除了这种情况,还有私有构造函数(以防止实例化只有静态方法和字段的类)以及关于泛型类的神秘(对我而言)。可能还有其他情况。
但是,最近我对这种接受感到不满。
虽然我的大部分专业经验都是在软件设计和开发方面,但我在硬件设计方面有所作为。我们有"覆盖"工具(实际上,可测试性)和我个人提出了我公司芯片和模块可接受的可测试性的标准,从90%和80%(分别)到接近100%和97%。 (几年之后有一个关于对抗的有趣故事 - "所以你就是那个人!" - 但这里并没有密切关系。)这个背景只是为了说明为什么我发现不到纯软件设计和开发中100%的覆盖率是不可接受的。软件是完全确定的,不像硬件,物理变化可能会侵入。
最近我遇到一个提示,即JUnit套件测试可能包含一个没有启用断言的测试。我没有时间跟进。
通过包含原始实例化测试,可以完善泛型类的覆盖范围。
不知道如何处理私有构造函数。
希望这有帮助。
答案 1 :(得分:0)
是的,你掌握了一切。这里只有3条路径:
你可以添加w< 0& h< 0但是没有更高的分支覆盖率