要不要单元测试?

要不要搞单元测试?

一、什么是单元测试?

单元测试的基本概念:
对软件中的最小可测试单元进行检查和验证

①单元的定义:代码中可度量的最小单元(函数、方法)

②检查和验证:不同的输入对应的输出是否与预期一致

二、如何进行单元测试?

1.要进行单元测试首先需要知道单元测试需要的几个基本原则:

①自动化:单元测试应该是全自动执行的,非交互式的。

②非相互依赖:单元测试方法的执行顺序不应该影响执行结果,各个方法之间不应该相互依赖。

③多设置断言:尽量多设置断言,把需要测试的结果都进行测试。

④结果唯二:单元测试只能有两种结果,通过或失败。

2.单元测试的基本流程:

①Arrange 准备阶段:设置前提条件,比如初始化对象、模拟数据等等。

②Act 行为阶段(执行动作):调用被测试的方法,并得到返回结果。

③Assert 断言阶段(验证结果):把调用目标方法返回的值和预期的值进行比较,如果和预期一致说明测试通过,否则就是失效。

3.单元测试示例
以C#平台的MSUnit测试框架演示

①简单模拟一个用户类及种子数据

②准备写好待测试的生产代码(以客户端开发常用的单例举例)

③编写单元测试

4.异常捕获测试
一些底层项目需要抛出异常,这种情况下我们需要对相应的异常也做出测试。

三、Mock框架-Moq

Mock在单元测试中是一个很重要的概念,

​ Mock是模拟的意思,Mock框架就是用来模拟对象的一个技术。一般在一下几种情况下用:

①真实对象具有不确定行为(比如不可预测的结果,类似股票)
②对象很难被创建
③对象的某些行为很难触发(例如网络错误)
④测试需要验证某个回调函数是否被调用
对象并不存在(多端的情况下或者和其他项目或服务打交道的时候)

以Moq框架为例,假设我们现在需要通过一个公司对象获取到该公司旗下的所有游戏,该方法依赖一个公司对象。

但是,这个公司对象以接口形式用公司名称获取,我们并不知道接口实现和公司数据库。

这时,我们就可以用Moq模拟一个公司仓储的实例,并设置好一些输入对应的输出结果。

“2”中的意思也就是说,当针对这个方法输入“南山必胜客”的时候,方法会返回Returns里面的对象。(例子不好,但是这么个意思)

“南山必胜客”懂得都懂
最后可以运行测试,得到测试结果。当我们看到一片绿的时候,心情是不是舒畅很多呢:)

四、为什么需要单元测试?

1.单元测试能解决的问题

①提高代码质量:

​ 对于每个最小的单元,针对不同输入对应的输出可以和预期结果做对比,减少因为参数导致的异常问题,代码变得更加健康,增加新需求时不用担心影响原来代码逻辑

②代码耦合度低、模块化:

​ 若要对一个模块单元进行单元测试,需要将每个单元拆分得相对独立,使得代码的逻辑、结构清晰,减少单元之间的依赖。代码出现bug更容易定位。

③代码可重用:

​ 经过单元测试的代码,既稳定又独立,可以更加方便的在其他项目或者项目重构时重复利用

④代码可读性强:

​ 单元测试某种程度上相当于系统的文档。借助于查看单元测试提供的功能和单元测试中如何使用单元,开发人员可以直观的理解每个单元的功能。

2.单元测试的缺点

浪费开发时间(写单元测试需要大量的时间,不如直接写具体的实现),有些模块根本无法进行单元测试(无返回值的方法、UI界面)

②不能发现集成错误、性能问题、或者其他系统级别的问题。单元测试结合其他软件测试活动更为有效。

单元测试还是应该多搞,不为别的,就为了看到那一片绿色,嘿嘿...
posted @ 2021-01-05 09:20  aaayi  阅读(404)  评论(0编辑  收藏  举报