| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> 单元测试 - 理论 -> 正文阅读 |
|
[开发测试]单元测试 - 理论 |
与单元测试相关的书籍,大约有这么三本,评分都不戳。
本文主要内容来自于《单元测试之道》,需要注意的是,它是2005年出版的书籍,谨慎接受其知识点。 几个概念无论文章或书籍,时常提及几个概念,注意区分。
TDD、BDD、ATDD都可归属于测试驱动开发,三者主要对比关系如下
测试什么提到单元测试,你肯定会想到测试边缘case,但其实不止于此。详细来说,所有需要考虑的点可以用RIGHT-BICEP表示 RIGHT结果是否正确? 首先考虑所有的正常case,保证基本功能正常。对于这类case,如果有大量测试数据,可以考虑使用数据文件存储,测试代码读取的方式。 B[order]所有边界条件都正确吗? 有一个方式有助于思考所有的边界条件
I[nverse]反向关联如何? 运用方法的反向逻辑关系来验证它们。比如插入数据库,可以用查询数据库进行验证。 C[ross]能用其它手段交叉检查结果吗? 计算一个量可以有多种算法,当我们实现一种算法时。可以在单元测试中用另一种看起来比较笨但正确率比较高的算法来对比验证。这就叫交叉检查。 E[rror]是否可以强制错误条件发生? 模拟现实情况中的错误,当然不可能去拔网线,但是我们可以Mock,一些典型的错误如
P[erformance]性能是否满足要求? 测试指定方法的性能,但是需要注意的是这类单元测试不能经常做,因为比较耗时,要与其它单元测试分开。
边界条件常见边界
引用性
比如,对数据库的操作应该就算是副作用,也需要对插入的结果进行验证。 基数性
时间性
使用Mock**单元测试的目的是一次只验证一个方法。**如果方法耦合了其它因素,比如数据库、网络请求等,此时我们在验证方法之前去准备这些外部环境,不仅浪费时间,还可能因为外部环境发生变化而导致单元测试在没有修改的情况下出现失败。此时需要使用Mock进行数据模拟。 一般来说,真实对象具有如下不方便的特点,Mock可以完全解决这些问题
何为好的单元测试单元测试虽好,但如果使用不当,则会浪费大量时间。有一个衡量单元测试好坏的标准:A-TRIP
面向测试的设计如TDD所说,从一开始就针对测试进行设计,具体来说:
书中给出了一个例子,一个GUI组件,将逻辑和GUI显示糅合在了一起,使得无法进行单元测试。解决方案是拆分出逻辑部分,对它进行单元测试。 一些陷阱一些陷阱,还挺典型的
总结一个好的单元测试,需要考虑的绝不仅仅是边界case,还需要考虑正确性、性能、代码的优雅性。 一个好的单元测试,最终应该是能够提升开发效率,而不是带来无止尽的修改,如果这种情况出现了,考虑重构单元测试🤔。 |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/18 5:41:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |