什么是单元测试
单元测试(unit
testing),是指对软件中的最小可测试单元进行检查和验证,单元是人为规定的最小的被测功能模块,在java中指的是一个类,凡是涉及其他类的使用都使用mock或指定固定的返回。
单元测试的作用
测试代码逻辑,快速回测,优化代码,大大减少后期维护
如何写测试类
首先看代码逻辑是否正确,如果不正确需要修改逻辑,然后再写测试类
找到方法的所有分支结构,找到可以覆盖方法所有逻辑的组合,每个组合写一个测试方法
方法需要的外部逻辑调用都采用mock测试,mock对应的结果,方法调用完成,验证方法的调用次数和结果断言
概念
mock就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的方法。
断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。对于我们来说就是,方法调用返回的结果应该是多少。
运行
覆盖率的方式运行测试类,查看测试类对应的类的覆盖率,如果未覆盖的分支需要补充测试类,覆盖率至少达到90%算合格
注意事项
mock返回的时候,如果是返回实体,需要使实体的所有属性的值互不相同,这样能更容易测试出问题
修改代码要同时修改测试类,如果不及时修改,后面会很难改,修改的时候不要为了测试能跑通而修改,这样修改没有意义
为了避免同一个类之间的数据相互影响,尽量少使用成员变量,如果使用成员变量,那赋值要在@BeforeEach(junit5)注释的方法里做,这样的方法在每个方法执行之前都会执行,就不会影响下一个方法的测试
单元测试尽量用真实的数据测试,这样更容易发现问题
单元测试需要注释清晰,不要把所有的逻辑都在一个方法里测试,否则,很难维护
使用org.mockito包mock对象时,对象必须有无参构造,不能mock的对象可以通过创建子类的方式实现