Swift界隈で話題沸騰中のテストフレームワーク Quick とは？


## Quickとは？

[Quick](https://github.com/modocache/Quick)は`Swift`が発表された２日後に`Github`にコミットされた、世界で一番最初の`Swift`のテストフレームワークです。[ビヘイビア駆動開発(BDD)](http://ja.wikipedia.org/wiki/%E3%83%93%E3%83%98%E3%82%A4%E3%83%93%E3%82%A2%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA)指向のテストフレームワークで、`Swift`と`Objective-C`の両方の言語に対応しています。[RSpec](https://github.com/rspec/rspec), [Specta](https://github.com/specta/specta), [Ginkgo](https://github.com/onsi/ginkgo)の影響を受けているそうで、記述がしやすく可読性の高いケースを表現できるのが特徴です。

![modocache_Quick.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/778aaa88-8737-8864-3a86-1819516aca2f.jpeg "modocache_Quick.jpg")
ロゴもSwift調のデザインで素敵です。


## 開発者は？

開発者は[modocache (もどかしい)](https://github.com/modocache)さんという日本にいらっしゃるエンジニアさんが作られています。ハンドルネームがとってもお洒落ですね。

[![modocache__Brian_Gesiak_.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/9d143618-9bd8-1d80-669e-1922829503ad.jpeg "modocache__Brian_Gesiak_.jpg")](https://github.com/modocache)


## 期待度は？

まだ開発開始から２週間弱ですが、とても活発に開発が行われており今後`Swift`のデファクトテストフレームワークになるのではと期待が寄せらています。

また既存の`ObjC`テストフレームワーク(※)は`Swift`に対応されておらず、ファンクショナルマクロを駆使して作られているので、ファンクショナルマクロに対応していない`Swift`への対応は難しいいそうです。

(※) `ObjC`テストフレームワーク
- [Kiwi](https://github.com/kiwi-bdd) BDD for iOS
- [Specta](https://github.com/specta/specta) A light-weight TDD / BDD framework for Objective-C & Cocoa
- [GHUnit](https://github.com/gh-unit/gh-unit) Test Framework for Objective-C
- XCUnit XCode default


ちなみに、[modocache (もどかしい)](https://github.com/modocache)さんは[Kiwi](https://github.com/kiwi-bdd)のコミッターでもあります。

[Quick](https://github.com/modocache/Quick)は`Github`の[Swift Weakly Trending](https://github.com/trending?l=swift&since=weekly)の上位に位置しており世界的にも注目を集めています。

[![Trending_Swift_repositories_on_GitHub_this_week.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/2d5eebfd-8817-c4ef-a502-f30f150276c7.jpeg "Trending_Swift_repositories_on_GitHub_this_week.jpg")](https://github.com/trending?l=swift&since=weekly)

## 利用者は？

公開されているプロジェクトであれば[RxSwift](https://github.com/jspahrsummers/RXSwift)で検討されているようです。[RxSwift](https://github.com/jspahrsummers/RXSwift)は[リアクティブプログラミング](http://www.infoq.com/jp/news/2013/09/reactive-programming-emerging)を行えるようにするライブラリです。

## テストコードはどんな感じ？

[README](https://github.com/modocache/Quick/blob/master/README.md)より拝借。
`Swift`で記述すると、まるで[RSpec](https://github.com/rspec/rspec)のように流れるがごとく美しく記述できます。テストを書くのが楽しくなることうけ合いです。


```Swift
// Swift

import Quick

class DolphinSpec: QuickSpec {
    override func exampleGroups() {
        describe("a dolphin") {
            describe("its click") {
                it("is loud") {
                    let click = Dolphin().click()
                    expect(click.isLoud).to.beTrue()
                }

                it("has a high frequency") {
                    let click = Dolphin().click()
                    expect(click.hasHighFrequency).to.beTrue()
                }
            }
        }
    }
}
```

```Objective-C
// Objective-C

#import <Quick/Quick.h>

QuickSpecBegin(DolphinSpec)

qck_describe(@"a dolphin", ^{
    qck_describe(@"its click", ^{
        qck_it(@"is loud", ^{
            Click *click = [[Dolphin new] click];
            XCTAssertTrue(click.isLoud, @"expected dolphin click to be loud");
        });

        qck_it(@"has a high frequency", ^{
            Click *click = [[Dolphin new] click];
            XCTAssertTrue(click.hasHighFrequency,
                @"expected dolphin click to have a high frequency");
        });
    });
});
```

Xcode上でエラー箇所や、テストの合否も確認できます。素晴らしい！
![687474703a2f2f662e636c2e6c792f6974656d732f32463336326b32453366307532523070337131632f53637265656e25323053686f74253230323031342d30362d31342532306174253230382e31362e3232253230504d2e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/4943/78fdb39d-082c-55a4-c21b-16554fe67144.png "687474703a2f2f662e636c2e6c792f6974656d732f32463336326b32453366307532523070337131632f53637265656e25323053686f74253230323031342d30362d31342532306174253230382e31362e3232253230504d2e706e67.png")

## この連載について
今後はインストール方法や、テストの記述方法などを投稿していきたいです。