branch10480’s blog

Topics that I've learned.

iOSアプリ開発自動テストの教科書 を読んでいく 〜 15 〜

フレームワーク Quick/Nimble

Quick/Nimbleは XCTest 上で動く OSSのBDD(Behavior Driven Deployment)、Assertionフレームワーク。

BDDフレームワークとしての Quick、MatcherによるAssertionを実行する Nimble から成り立つ。

Quick とは

BDDスタイルでテストコードを記述できるテストフレームワーク。より要求仕様に近い形でテストコードを表現んすることに主眼をおいたもの。

以下のコードでこのような振る舞いが把握できる。

isEmptyは
    ・0文字以上の時
        trueを返すこと
    ・1文字以上の時
        falseを返すこと

■ 対象のコード

class StringSpec: QuickSpec {
    override func spec() {
        describe("isEmpty") {
            context("0文字以上") {
                it("trueであること") {
                    XCTAssertTrue("".isEmpty)
                }
            }
            context("1文字以上") {
                it("falseであること") {
                    XCTAssertFalse("a".isEmpty)
                }
            }
        }
    }
}

Nimble とは

Matcher API による Assertion を提供する。内部では XCTAssert が実行されるが、Matcher API をりようすると以下のような利点がある。

  1. 複雑なAssertionを簡単に描ける
  2. 目視したときに意図が伝わりやすい
  3. テスト失敗時のエラーメッセージがわかりやすくなる
let arr = [0, 1, 2]
expect(arr).to(contain(4))

上記テストの失敗メッセージ

=> expected to contain <4>, got <[0, 1, 2]>

このように Nimble では自然な英文のようにテストコードを記述でき、かつエラーメッセージもわかりやすい。

> 次回に続く