近期的主要工作之一就是单元测试的编写,对于从零开始的我来说真的是有一定难度。开一贴记录一些单元测试方面的相关问题吧。
目前来看遇到的问题主要是如何把代码或功能转化成单元测试最理想的形式,这就要求代码结构非常好,耦合度低。关于这点以后有经验了再来补充。
目前比较主流的方式都是通过一些返回值或者取值来与目标期待值或阈值作对比,从而得出结论,结果与预期是否相符。中间的问题就是有些代码逻辑执行的过程中,很难找到这样一个值来做判断。基于此问题,想到了以下两个方法:
一、把一些返回值为void类型的方法改为有返回值的方法
很多方法比如给一些成员变量赋值时,通常我们是不需要返回值的。但是在单元测试中,我们往往需要取得一些值来判断我们的程序执行是否正常。之所以这样修改主要是考虑到这样对开发成本比较节约,我们只需要修改一个返回类型,并且在函数运行末尾返回我们单元测试想要用的对象即可。而程序本身的执行与逻辑并不受到影响。为了便于理解,我们可以加上注释,注明此返回值用于单元测试。
二、专门编写单元测试取值的代码
这种方法优势在于原代码逻辑丝毫不动,我们编写一些专门用于单元测试取值或者运算的代码来协助单元测试,如最简单的get方法。但是此方法的弊端显而易见,除日常开发外,我们还需要花大量精力和时间去写这些方法,额外增加了开发成本。
感觉上是方法二是比较完美的解决方案,但是我很懒,想用方法一。
三、使用反射
反射的优势在于可以直接获取到类,类中的成员变量及方法等等。但是将此用于单元测试,还需研究。