17. assertEquals(y6,subsection.getValue(d6));
18. }
19.
20. public void testSign() {
21. double d1 = -1.0, d2 = 0.0, d3 = 1.0;
22. int y1 = 1, y2 = 0, y3 = 1;
23. assertEquals(y1, subsection.sign(d1));
24. assertEquals(y1, subsection.sign(d1));
25. assertEquals(y1, subsection.sign(d1));
26. }
27. }
打蛇打七寸,擒贼先擒王,抓Bug还须在那些关键点上下功夫,特殊转换点是最容易出现问题的热点地区,需要给予特别的关注。所以我们为getValue()设置了6个测试点,而为sign()方法设置了3个测试点。
在工程窗格资源树中找到TestSubsection.java文件,右击在弹出的菜单中选择Run Test using "TestSubsection1",JBuilder利用JBTestRunner测试运行器运行这个测试用例,在信息窗格中出现如下的运行器界面:
图 JBTestRunner运行器界面
JBTestRunner窗口左边为3个标签页,它们的作用在下表的说明:
表 JBTestRunner窗口标签页说明
当没有发生失败的测试时,测试进度条显示为绿色,否则显示为红色。对于测试用例很少的情况你看不到它的效果,如果成百上千的测试用例一起运行,这个进度条的作用是显而易见了。进度条右边是测试结果统计信息:包括测试方法总数和成功数,统计信息右边是测试所花费的时间。
右帧是测试失败的引发点,单击链接,JBuilder自动定位到测试用例测试失败的地方,在本例里,JBuilder将定位到代码清单 添加测试规则后的TestSubsection类的代码的第17行,即:assertEquals(y5, subsection.getValue(d5));所在的行。
说明测试失败是由这个断言引起的,由于这个断言测试入参大于32时的函数返回值正确性,所以我们就知道程序没有考虑到返回值超过int类型范围的情况。返回到代码清单 前文分段函数代码中将第13~15行被注释的代码放出来,重新运行测试,你将发现测试全部通过了。
这也说明,编写一个有效测试用例并非易事,程序路径100%覆盖,完美的测试用例往往很难达到。当然,你可以依照一些经验性的原则,其中最大的一条就是:关注关键点。测试用例编写的技巧,超过了本文的范围,读者可以自行参考相关的书籍。
提示:
有时,JBTestRunner右边的帧窗口虽然内容已经超出,但滚动条却没有显示出来,想来应该是JBuilder一个小小的Bug吧。你可以在帧窗口中右击,在弹出的菜单中去除Word Wrap设置项,或者手工移动一下左右两帧间的分隔栏,滚动条就会显示出来了。
文章来源于领测软件测试网 https://www.ltesting.net/