objc中国测试篇(学习笔记1)

今天看了一下objc中国的测试篇,做了一下学习整理。本文不涉及测试代码,只是从概念上理解测试。

一、行为驱动开发(BDD)

1. 应该测试什么?

应该测试对象的行为,即对象的方法接口,接口定义了对象的行为。BDD的思想是尝试思考行为的结果,而不是实际的实现。

2. BDD DSL

测试模板为:

SpecBegin

describe(@"string about what to test",^){

context(@"string about context", ^{

beforeEach(^{

// code

});

it(@"some strings", ^{

// test code

});

});

});

SpecEnd

SpecBegin 声明了测试类;SpecEnd 结束了类声明。

describe 块声明了一组实例。

context 上下文。

it 是一个单一的例子 (单一测试)。

3. BDD框架

BDD框架有specta, kiwi, Cedar,当涉及到语法,所有这些框架几乎是相同的。它们之间的主要区别在于它们的可配置能力和绑定的组件。

1)Cedar:捆绑了匹配和置换,包含了额外配置功能:集中测试,和反向配置功能。

2)Kiwi:捆绑了匹配和stubs, mocks,但是没有可配置的功能。

3)Specta:缺少匹配、subs、mocks功能,但是具有可配置功能。

4. 举例说明

文章列举了四个例子:消息格式化、数据下载、测试视图控制器、登陆视图控制器。有兴趣的可以去objccn中去看具体的例子。

5. 结论

BDD的思想是专注于测试对象的行为而不是内部实现。

二、XCTest测试实践

XCTest比较简单,而且与Xcode IDE集成。测试用例被分到继承 XCTestCase 的不同子类中去。每个以 test 为开头的方法都是一个测试用例。一般测试用例的命名:testThatIt***或者test+待测试的方法名、类名。如果禁用某一test case,可以在用例名前加前缀Disabled_。

1. 测试用例的组织模式Given/when/then

Given描述指定的测试状态;

when描述测试代码;

then检查测试结果。

测试用例示例:

- (void)testThatItDoesURLEncoding

{

// given

NSString *searchQuery = @"$&?@";

HTTPRequest *request = [HTTPRequest requestWithURL:@"/search?q=%@", searchQuery];

// when

NSString *encodedURL = request.URL;

// then

XCTAssertEqualObjects(encodedURL, @"/search?q=%24%26%3F%40");

}

2. 可重用的代码

将可重用的代码通过公用类来维护,也可以在 XCTestCase 类中直接实现委托协议。

3. Mocking

用 mock 来管理一个对象的所有依赖项,通过这个方式对类进行隔离测试,但是注意不要过度mock。通过函数- (void)verifyMockLater:(id)mock;验证mock对象。

4. 状态性和无状态性

一些类中包含状态,而大部分则是无状态的。状态的管理又很容易引起很多 bug,因为管理状态非常复杂。通过隔离状态来使测试代码更好的运行,测试用例也变得简单。

文章中还提到需要XCTest中的技巧,大家需要结合测试例子看,这里我就不一一赘述了……

5. 与Xcode和XCodeServer集成

XCTest 最好的优点就是它可以和 Xcode IDE 集成的非常好。

当运行一个或某几个测试用例时,点击左边栏上、靠近行数的小菱形按钮即可。也可以从测试导航中运行某一个或一组测试用例,并且可以过滤所有失败的测试用例。

持续集成:Xcode Server是一个基于 Xcode 的持续集成服务器。只要有新的提交,Xcode Server 就会自动从 Github 上 check out工程,然后可以让它运行静态分析、执行测试用例,并且自动打包成 Xcode archive 以供下载。

6. BDD和XCTest

XCTest 的优势和缺点都是由于它太简单了,其优点还有易于和XCode集成,但是XCtest的功能还不够强大。因此,XCTest 对中小型的工程来说是一个很好的选择,但是对于更大型的工程,就有必要参考一下像 Kiwi 或者 Specta 这样的 BDD 框架。


参考website:http://objccn.io/issue-15/

欢迎访问我的个人博客 www.dzwanli.com.cn


objc中国测试篇(学习笔记1)_第1张图片

你可能感兴趣的:(objc中国测试篇(学习笔记1))