zoukankan      html  css  js  c++  java
  • 要不要单元测试?

    要不要搞单元测试?

    一、什么是单元测试?

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

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

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

    二、如何进行单元测试?

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

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

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

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

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

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

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

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

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

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

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

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

    ③编写单元测试

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

    三、Mock框架-Moq

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

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

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

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

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

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

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

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

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

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

    ①提高代码质量:

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

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

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

    ③代码可重用:

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

    ④代码可读性强:

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

    2.单元测试的缺点

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

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

    单元测试还是应该多搞,不为别的,就为了看到那一片绿色,嘿嘿...
  • 相关阅读:
    6-1面向对象
    5-1模块
    python随机数
    4-5目录
    4-4内置函数
    4-3迭代器和生成器
    4-1装饰器1
    4-2装饰器2
    3-4函数-全局变量
    3-5递归-函数
  • 原文地址:https://www.cnblogs.com/codexiaoyi/p/14230350.html
Copyright © 2011-2022 走看看