美文网首页计算机技术一锅炖
objc中国测试篇(学习笔记1)

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

作者: chichichichi | 来源:发表于2014-12-29 22:40 被阅读457次

    今天看了一下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)

        本文链接:https://www.haomeiwen.com/subject/qoqztttx.html