软工个人项目-8.单元测试

// 鬼知道我QAQ这个下午经历了什么。。

12/27

13:30~14:20

寻找C语言单元测试的资料,然后找到一堆C++。

因为并不清楚那些个全局变量应该怎么处理,很多函数使用和改变了外部的全局变量,感觉是传说中“不可测”的代码。

14:20~18:20

github上找到了一个人在VS里写的对C语言的测试cpp,大体有了概念。

显然,C语言并不是不能测。如果在调用被测试函数之前把所需要的全局变量都根据语境设定好,就可以测。

PCH_H

然后遇到的第一个问题是,明明之前设置的不使用预编译头,和测试工程一起生成之后,VS非要pch.h。我把测试工程的“需要预编译头”选项也去掉,没有作用。但pch我已经删了。我尝试新建一个内容一样的,但是它无视了这个文件。最终我把两个工程卸载再装载莫名其妙就好了。具体原因尚待探究。目前就先记住管住手不要乱动东西。

LINK

第二个问题是,我新建的测试项目即使设置了引用以及添加了.obj,一直链接失败,说缺乏符号。然后一头扎进VS的链接器文档,修改各种配置参数,也没有解决。这一部分特别不堪回首。最终这个问题通过把sudoku项目下的源文件复制粘贴到测试项目下暴力解决:就不信这样还 (=。=) 找不到声明对应的定义。

这也有点不求甚解的意思。常言道,最友好的错误是编译错误,最差的是链接错误,明明写的都对,就是跑不了。链接器的各种操作,且待后续观察吧。

NULL PTR

终于可以测试了,为了测试方便(其实毫无意义),我把debugger的命令行参数删了,然后发现原来用的好好的sudoku生成不了了,显示未加载ucrtbased.pdb。然后就各种方法补充符号文件,但是都没有用。最终看到报错信息有0x000000字样,而且一次重启VS后它跳到strcmp的汇编代码里去了,就怀疑和空指针有关。最终把debugger的命令行输入值之后一切恢复了正常,然后发现是main里的流程控制有疏忽,在命令行没有参数的时候没有及时退出,而是参与到后面的命令行解析中,导致对字符串的空指针访问。

然后痛哭,解决了一大堆自找或非自找的ERROR,终于可以测试了。

19:30~21:30

编单元测试。通过不了的原因都是测试用例写出了bug:被测代码比人脑子想的测试用例靠谱多了。

最大收获是掌握了调试未通过测试的办法(其实和平时一样的断点啦),和测试错误输出的办法(记得加L)。

代码覆盖率测试的功能Enterprise才有,但是实在没时间装那个东西了,就没有做。

22:30~23:20

写这篇博客。

一些吐槽:

真的好沮丧,我感觉我干什么都特别慢。尤其是写代码,连个回溯都写了一个小时,虽说一次通过没有bug,但是很多时间就是对着屏幕发呆。而且好多时间都在搞VS,今天时间主要就用来卡它了。

哎,不管了,下一步,消除所有警告。晚安同学们。

猜你喜欢

转载自blog.csdn.net/qq_36965871/article/details/85313216