Wrappres' Studio.

iOS中面向测试开发和面向行为驱动开发

字数统计: 629阅读时长: 2 min
2020/02/16 Share

iOS中面向测试开发和面向行为驱动开发

从测试范围划分

软件测试可以分为单元测试,集成测试,系统测试。开发者负责单元测试,测试团队负责集成测试以及系统测试。

单元测试也叫模块测试,是对单一的功能代码进行测试,会使用Mock方法模拟外部使用,通过编写各种测试用例来检验代码的功能是否正常。

从开发模式划分

开发方式可以分为TDD(Test-driven development,面向测试驱动开发)和BDD(Behavior-Driven development,面向行为驱动开发)。

  • TDD:先编写测试用例,在不考虑代码优化的情况下快速编写功能实现代码,等功能开发完成后,在测试用例的保障下,在进行代码重构,以提高代码质量。
  • BDD:是TDD的进化。基于行为进行功能测试,使用DSL(Domain Specific Language,领域特定语言)来描述测试用例,让测试用例看起来像文档一样,更易读,更好维护。

Kiwi

BDD 的 Objective-C 框架有 Kiwi、Specta、Expecta等,Swift 框架有 Quick。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// describe 表示要测试的对象
describe(@"RSSListViewController", ^{
// context 表示的是不同场景下的行为
context(@"when get RSS data", ^{
// 同一个 context 下每个 it 调用之前会调用一次 beforeEach
beforeEach(^{
id dataStore = [DataStore new];
});


// it 表示测试内容,一个 context 可以有多个 it
it(@"load data", ^{
// Kiwi 使用链式调用,should 表示一个期待,用来验证对象行为是否满足期望
[[theValue(dataStore.count) shouldNot] beNil];
});
});
});

描述的是RSS列表页面,当获取RSS数据时去读取数据这个行为的测试用例。

  • describe 表示要测试的对象,context表示的是不同场景下的行为,一个dsscribe里可以包含多个context。
  • it表示的是需要测试的内容, 同一个场景下的行为会有多个需要测试的内容,也就是说一个context下可以有多个it

现状

在团队里推行TDD和BDD的最大困难,就是业务迭代太快时,没时间去写测试用例。优先对基础能力的功能开发使用TDD和BDD,保证了基础能力的稳定,业务怎么变,底子还都是稳固的。当有了业务迭代,有了间隙时,再考虑在核心业务上采用BDD,最大程度的保证App核心功能的稳定。

CATALOG
  1. 1. iOS中面向测试开发和面向行为驱动开发
    1. 1.1. Kiwi
    2. 1.2. 现状