欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

软件构造踩坑记录——测试

程序员文章站 2022-03-10 14:52:56
...

(3.4的修改忘了没传到git仓库,一起交了)中间几天都没有动实验,懒了。今天写了一下测试,测试真是毒瘤,踩了许多坑,不过好在终于完成了。记录一下踩的坑
为了读入时能够判断是否重名,我在Person类中添加了一个静态私有成员Setpeoples,用于记录已经添加过的人的姓名的集合,于是悲剧开始了,写完测试函数后一个一个测试完全没有问题,于是开开心心疯疯癫癫得开始一起测试,然后就输出了"Each person should has a unique name!",然后发现每个测试把人名加到peoples里面后,之后的测试还是往同一个peoples加,就会出现重复。于是我想那就不加static了,恩,果然测试都没问题了;但是我转念一想,每个Person实例都有一个单独peoples,那就算真的重名了也不会出现"Each person should has a unique name!"吧!于是我造了个测试样例,输入了两个同名的人,果然测试还是通过了,没有显示错误信息。考虑到题目的逻辑,肯定要先输入人名,再加点,再加边,最后算距离,于是我想:本来每个测试函数都new一个FriendShipGraph,还要new很多也就4个,哪来很多Person实例,那我把这些都搞成全局变量不就好了!(不要模仿,不要乱搞全局变量,不然容易耦合度高)于是按照这个想法实现了一下,但是因为本人很蠢,实现的时候还把"全局变量"放在测试类里面,结果它们都变成数据成员了(事后记录的时候才发现的,也许放到类外就可以了,没有尝试)。结果测试的时候抛出了Null啥啥的异常,只有第一个测试的函数通过了。我又开始debug,发现从第一个函数结束,到第二个函数,我认为的"全局变量"们(实际上是数据成员),都变成null了,不管它们原先的值是多少,而且我发现被测试的函数的顺序和我想的有所不同。一开始,我以为是测试函数的顺序的原因才导致出现null,因为按照我的想法只有先测试了addVertex函数后graph中才会有点(所以说不要瞎搞全局变量!耦合度太高了),我就想着怎么控制测试顺序(还没意识到耦合度过高的我,是屑)。在网络上一番搜索,发现在从Junit 4.11版本开始,Junit的测试是按照一个固定的但是不可预测的顺序执行的。
但是Junit 4.11及之后的版本提供了改变测试顺序的方法

import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
    
@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class FriendShipGraphTest {}

NAME_ASCENDING表示根据测试函数的函数名按照字典序从小到大进行测试,当然还有别的,在此不一一列举。于是我改了该函数名来改变测试顺序,又一次得到了Null啥啥的异常。又开始debug,结果发现从一个测试函数到另一个测试函数后那些"全局变量"们又双变成null了,察觉到不是顺序的问题,但也没去考虑自己"全局变量"位置放错了。我转念一想:每次clear一下Set不就不会出现不该出现的重复了吗(这句话貌似不有点多)!然后又把代码改回去,终于绿了​​

上一篇: Lab1 report

下一篇: 软件构造Lab2