寝室的秘密授课(四):测试覆盖率 Test Coverage

「为什麽要写这麽多测试案例啊?加减乘除不是四个就够了?而且除法测试里面还多放了一个assertFailsWith?」诗忆提问。

唯心听到这个问题後不由得苦笑起来。「一帆风顺固然是好,但那只是理想,真实世界往往一波三折。我就曾经见过一位乘客把健保卡拿出来刷车票钱,问公车司机为什麽刷不过。如果那个司机不理乘客或是回应不知道,乘客可能会和他吵起来或是检举他。」

「程序所在的世界也非常现实,所以对於一些失败的情况也要预先做好准备。就像第一份作业不少同学交上来的程序连跑都不能跑,给零分会很轻松,但是现实是我必须一行一行看,对完成度比较高的同学给予比较高的成绩。」唯心说完之後好似陷入那段痛苦的回忆,眼睛失去了光彩。

确信自己是加害者之一的诗忆摩挲着手指,不知道如何反应比较好。

静寂下来的寝室里,气氛变得有些僵硬。

诗忆眼神游移不定,突然瞥见桌上的杯子,脑中灵光一闪,从背包拿出两瓶果汁,将一瓶递给唯心。「学姐一定口渴了吧,这瓶给你。」

唯心呆楞的接过果汁,木然地转开盖子,盖子上的水珠滴落到她的手背。冰凉的触感吓得她往後急退了几步,站稳後向正在喝果汁的诗忆发出了警告。「饮料还是不要在笔电旁边喝唷,洒上去就麻烦了。」

「了解。」诗忆把瓶盖旋紧,放到远离笔电的位置。

唯心回到原来的话题。「assertFailsWith就是用来测试范例程序有没有预测到失败情况。大於符号和小於符号中间包的是失败的类型。ArithmeticException是指四则运算失败,IllegalArgumentException则是指放进了不合规则、四则运算以外的符号。」

唯心小心翼翼的喝了口果汁,关紧瓶子後继续说:「所以如果养成先写测试再写程序的习惯,可以大幅度降低程序出问题的可能性。」

诗忆想了想,反问另一种情形:「如果先写程序再写测试的话呢?或是程序是由其他人写好的?」

「那就可以利用测试覆盖率功能,可以检查有没有没测试到的地方。」唯心再次把游标移动到四则运算旁边三角形的地方。

诗忆重看了一次显示出的清单,在之前的Run 四则运算测试下方有一个Run 四则运算测试 with Coverage

图1

诗忆提议:「既然这样的话,以後都跑这个覆盖率测试,不需要原本的测试吧?」

唯心摇摇头。「你比较一下两者花费的时间就知道为什麽不会每次都检测覆盖率了。」

图2

图3

「⋯⋯将近七倍的时间。」诗忆目瞪口呆。

「现在我把覆盖率降低给你看。」唯心回到诗忆旁边,修改了例外测试的程序码。

//    @Test
//    fun 例外测试() {
//        assertFailsWith<IllegalArgumentException> { 学号().四则运算(1, '?', 0) }
//    }

「对了,顺便介绍一下。程序码可以在不删除的情况下被略过,称之为注解,方法是在前方加上双斜线。」说完之後唯心就再次启动了检测覆盖率功能。「你看,覆盖率行数的地方,是不是从100%降低到87%了?」

图4

图5

诗忆点点头,记下了程序码注解和测试覆盖率的方法。


<<:  Day3-"if-else"

>>:  【Day 10】os模组

[Day25] 忘记压缩档密码怎麽办? 用Python多重处理快速破解压缩档密码!

因为公司政策规定,传机密压缩档的时候都要加上密码, 但是收到的档案这麽多,每次都要翻信找密码真的太麻...

SQL Server 记录档的问题与解决方案 - 心得分享

DBA Bootcamp 几天前,oncall DBA 接到请求支援的电话,状况是这样的… 有一个 ...

DAY11 - [JS] 经典的ToDoList

今日文章目录 ToDoList 需求 事前准备 参考资料 ToDoList 需求 Q: 需要有哪些...

[ Day6 ] General Skills 小柚子

大家中秋节快乐 有没有烧肉吃饱饱,剥柚子,带柚子帽呢? 今天正15,月亮超级圆好漂亮喔 今天是我们来...

Day1 # Let's Go!

Go(又称 Golang)是 Google 开发的程序语言,详细简介在 wiki 上都可以找得到。 ...