单元测试及NUnit测试框架简介(一)

一、单元测试的概念

定义

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

单元测试应仅用于测试“受开发者控制的”代码,即不包括与数据库、文件或网络系统等基础设施的交互。

特点

  • 单元测试几乎都是用单元测试框架编写的
  • 单元测试一般又开发人员编写
  • 单元测试容易编写,能快速运行
  • 单元测试可靠、可读、可维护
  • 只要产品代码不发生变化,单元测试的结果是稳定的

二、为什么要做单元测试?

编写单元测试可以给开发过程带来众多优点,包括可以让开发者尽早发现错误,具有可回归性,提供文档以及帮助改善软件设计。下面将一一进行详述:

  • 让故障被尽早发现
    单元测试是在开发阶段进行的一种测试,也就是在整个开发周期较早的时期。按照统计,软件故障发现的越晚,修改的成本越高,到后期几乎是呈指数上升。良好的单元测试可以让故障在第一时间发现,避免故障留到后期因为定位和修复难度的增加而带来更大的损失。
  • 减少进行功能测试的时间
    进行功能测试十分耗时,包括打开软件,按照步骤执行等,少则几秒钟,多则几分钟,单元测试可能只需要几毫秒。使用单元测试不需要执行人对系统有所了解,只需要点击鼠标就可以运行单元测试,整个单元测试由计算机执行,减少了人为的错误。需要注意的是,虽然单元测试很强大,但是不能完全替代功能测试。
  • 具有可回归性
    软件开发过程中,添加新功能、修改bug、重构等多个过程都可能引入错误,改变软件原有行为,此时需要进行回归测试,测试原有功能,保证其没有改变。此时单元测试就是一个很好的工具,可以节省大量时间,并保证准确性。
  • 提供使用文档
    有时开发者希望知道为函数的某个值时会返回什么样的结果,这时就可以利用单元测试,每个测试用例解释了某一输入和对应的预期输出,这就可以作为一份接口使用的文档提供给用户。
  • 帮助产生低耦合的代码
    单元测试可以帮助改善软件设计,促进产生松耦合的代码设计和实现。因为高耦合的代码难以测试,为了进行单元测试,会迫使开发人员重新审视自己的代码,并进行解耦。
  • 提高底层代码的正确性和稳定性
    底层代码通常不便于用功能测试验证其正确性,良好的单元测试可以提高底层代码的正确性和稳定性,进而提高软件整体的正确性和稳定性。如果在底层代码的开发阶段就能定位到错误,及时解决,比等到用户(库程序的用户)发现错误再进行排查要容易得多。

https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices

三、什么样的单元测试是好的?

  • 运行速度快
    成熟软件项目可能有成千上万个单元测试,每个单元测试的执行时间是毫秒级的(视接口类型而异)。
  • 独立的
    单元测试应该可以独立运行,不相互依赖,并且不依赖于文件系统或数据库等外部因素。
  • 可重复的
    在不更改测试用例的情况下,每次运行单元测试应该返回相同的结果。
  • 自检
    单元测试应该可以在无人为干预的情况下,自动检测测试用例是通过还是失败。
  • 及时
    编写单元测试应该非常简单迅速。

四、关于代码覆盖率(Code Coverage)

代码覆盖率是之指单元测试覆盖到的代码数量占代码总数的比例。高代码覆盖率通常与高质量代码相关联。但是这项指标并不能决定代码的质量的高低。

“一个测试是否值得编写取决于你对平均无故障时间(MTBF)衡量的仔细程度。如果你想让起搏器程序的MTBF从10年延伸至100年的话,那么对那些极不可能发生的条件和条件组合进行测试就是有意义的。” ——《测试驱动开发》

“测试驱动开发对测试的观点就是注重实效。在测试驱动开发

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值