| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> 阿里p8手把手教学,如何写出简洁又规范的单元测试? -> 正文阅读 |
|
[开发测试]阿里p8手把手教学,如何写出简洁又规范的单元测试? |
编写功能、业务代码的时候一般会遵循kiss原则 ,所以类、方法、函数往往不会太大,分层设计越好、职责越单一、耦合度越低的代码越适合做单元测试,单元测试也倒逼开发过程中代码分层、解耦。 ? 可能某个功能的实现代码有30行,测试代码有50行。单元测试的代码如何编写才更合理、整洁、规范呢? 编码分模块展开 先贴一段代码:
(左右滑动查看完整代码) 可以看到这个方法的名称为 testInsertDataInOneSpecifiedTable,这段代码做的事情通过函数名可以看出来:测试插入数据到某个特定的表。 这个测试用例分为3部分:
其实,每个测试用例的编写也要按照该种方式去组织代码。步骤分为3个阶段:Given->When->Then。 所以单元测试的代码规范也就出来了。此外单元测试代码规范统一后,每个人的测试代码都按照这个标准展开,那其他人的阅读起来就更加容易、方便。 按照这3个步骤去阅读、理解测试代码,就可以清晰明了的知道在做什么。 一个测试用例只测试一个分支 我们写的代码有很多语句组成,有各种逻辑判断、分支(if...else、swicth)等等,因此一个程序从一个单一入口进去,过程可能产生n个不同的分支,但是程序的出口总是一个。 所以由于这样的特性,我们的测试也需要针对这样的现状走完尽可能多的分支。相应的指标叫做「分支覆盖率」。 假如某个方法内部有 if...else...,我们在测试的时候尽量将每种情况写成一个单独的测试用例,单独的输入、输出,判断是否符合预期。这样每个case都单一的测试某个分支,可读性也很高。 比如对下面的函数做单元测试,测试用例设计如下:
(左右滑动查看完整代码)
(左右滑动查看完整代码) 明确标识被测试类 这条主要站在团队合作和代码可读性角度出发来说明。 写过单元测试的人都知道,可能某个函数本来就10行代码,可是为了测试它,测试代码写了30行。 一个方法这样写问题不大,多看看就看明白是在测试哪个类的哪个方法。 可是当这个类本身就很大,测试代码很大的情况下,不管是作者自身还是多年后负责维护的其他同事,看这个代码阅读成本会很大,需要先看测试文件名“代码类名+Test”才知道是测试的是哪个类,看测试方法名“test+ 方法名”才知道是测试的是哪个方法。 这样的代码可读性很差,所以应该为当前的测试对象特殊标记,这样测试代码可读性越强、阅读成本越低。 比如定义局部变量 _sut 用来标记当前被测试类(sut——System under Test,软件测试领域有个词叫做被测系统,用来表示正在被测试的系统)。
(左右滑动查看完整代码) 使用分类 来暴露私有方法、私有变量 某些场景下写的测试方法内部可能需要调用被测对象的私有方法,也可能需要访问被测对象的某个私有属性。 但是测试类里面是访问不到被测类的私有属性和私有方法的,借助于Category可以实现这样的需求。 为测试类添加一个分类,后缀名为UnitTest,如下所示。 HermesClient类有私有属性@property (nonatomic, strong) NSString *name;,私有方法 - (void)hello。 为了在测试用例中访问私有属性和私有方法,写了如下分类:
|
|
开发测试 最新文章 |
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:37:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |