Swift 单元测试

Swift 单元测试参考

什么是单元测试

单元测试: 针对程序模块的最小单元来进行正确性检验的测试工作。对于面向对象编码来说,最小单元就是方法
其实就是验证一些基本规则。
基本原则

命名

使用领域命名,用命名直接告诉别人你在测试什么,测试方法某个方法就用test+方法名, 测试操作就用test+操作

其中一个测试文件应该只有一个测试类。

编写短测试

单元测试要短而清晰,目标只有一个,一个测试就像一个细胞

一个Case只测一种情况

一个测试尽量只有一个断言,这样测试目的就很清晰。

可能我们调用的一个API内部有一个if…else…。我建议if一个case,else一个case。分两个不同的case来作测试.这样每个case就很清晰自己在测试什么东西。而如果全部杂糅在一个case中,可读性会降低不少,而且case体积也会变得相对大很多,因为你要Given-When-Then两次。更不建议在case中写for循环验证。有人说我的测试目标函数中有很多if…else…,那么我觉得你应该重构下你的设计了

测试方法遵循Given-When-Then

在测试方法内,一般就是三大步:准备数据 - 操作 - 结果


- (void)testSomeFunction{

//given: 数据准备

_sut.collectionType = 1;

NSIndexPath *path1 = [NSIndexPath indexPathForRow:1 inSection:1];

//when: 操作

BOOL needToShow1 = [_sut needToShowRow:path1];

//then: 结果/断言

assertThatBool(needToShow1,isTrue());

}

不要链接测试

每个测试应该互相独立,不应该互相依赖。

我经常看到人们有链接测试的习惯。这通常是因为准备工作非常困难。但这不是一个解决方案。在测试链中,依赖于其他测试的测试之所以失败,大多数情况下都是因为前面的测试失败了。在这种情况下,你可能会修改代码让测试通过,但你可能会因为测试不完备而引入没有验证到的缺陷。

How

参考 iOS-单元测试详解 单元测试操作和基本理论

Why

为了你以后的工作,请写单元测试

单元测试覆盖率

默认情况下,Xcode不会收集测试范围,但我们可以在设置中很容易打开。首先同时按住

⌥+⌘+U键,调出当前Target的测试设置。然后打开Options选项卡,并选中Code Covetage复选框,如下所示:

img

这样就设置好了。以后我们每次运行测试后都会生成单元测试覆盖率数据。一种方法是打开Report Navigator(⌘+9)查看,现在将显示每个测试会话的覆盖率报告:

img

我们还可以在编码窗口显示覆盖率数据。要启用此功能,点击右上角的 Adjust Editor Options,然后点击Code Coverage。平时如果感觉影响开发也可以关闭。开启后你能看到你写的代码哪些被单元测试覆盖到了:

img

如上图所示,所有尚未测试到的代码右边都被红色突出显示,并且所有代码迭代次数也将显示出来。

参考:

  1. iOS-单元测试详解 单元测试操作和基本理论
  2. 编写良好的单元测试 单元测试的理解,提供该怎么单元测试
  3. 单元测试编码规范 单元测试该怎么命名和基本步骤(Given - When - Then)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值