Quickをとりあえず試してみる


## インストールー

### インストールは3ステップ

1. Quickリポジトリのclone
2. テストターゲットに`Quick.xcodeproj`と`and Nimble.xcodeproj`に追加する
3. `Quick.framework`と`Nimble.xcodeproj`をリンクする

### Quickをgit clone

```console
$ git clone git@github.com:modocache/Quick.git
```

### 適当にプロジェクトを作るる

![スクリーンショット 2014-06-20 23.41.06.png](https://qiita-image-store.s3.amazonaws.com/0/29846/f7b1aead-73c5-1955-cb10-b332076615e8.png "スクリーンショット 2014-06-20 23.41.06.png")

![スクリーンショット 2014-06-20 23.41.25.png](https://qiita-image-store.s3.amazonaws.com/0/29846/0174df67-7a57-9e34-f9f0-045a20548b71.png "スクリーンショット 2014-06-20 23.41.25.png")

### テストターゲットに`Quick.xcodeproj`と`and Nimble.xcodeproj`に追加するるる
![スクリーンショット 2014-06-20 23.41.48.png](https://qiita-image-store.s3.amazonaws.com/0/29846/28bcc94f-b418-5f6f-a79b-d0c315f0dd73.png "スクリーンショット 2014-06-20 23.41.48.png")


![スクリーンショット 2014-06-20 23.41.59.png](https://qiita-image-store.s3.amazonaws.com/0/29846/6a84c83b-8f48-7ad6-6541-01e94cde3ba3.png "スクリーンショット 2014-06-20 23.41.59.png")
![スクリーンショット 2014-06-20 23.42.14.png](https://qiita-image-store.s3.amazonaws.com/0/29846/2337425f-e327-192b-49d8-8028d850b3bd.png "スクリーンショット 2014-06-20 23.42.14.png")

### `Quick.framework`と`Nimble.xcodeproj`をリンクするrurururu

それぞれ、iOS用とMac用があるので間違えないように。

![スクリーンショット 2014-06-20 23.48.14.png](https://qiita-image-store.s3.amazonaws.com/0/29846/72a86272-6739-b9c6-3af0-53606b544593.png "スクリーンショット 2014-06-20 23.48.14.png")
![スクリーンショット 2014-06-20 23.48.21.png](https://qiita-image-store.s3.amazonaws.com/0/29846/619fcdf0-940e-1e1c-fe4e-c215de0fc8dd.png "スクリーンショット 2014-06-20 23.48.21.png")
![スクリーンショット 2014-06-20 23.48.25.png](https://qiita-image-store.s3.amazonaws.com/0/29846/2a4c8865-8e5e-eaa4-6408-60c77490c815.png "スクリーンショット 2014-06-20 23.48.25.png")

## テストするモデルのクラス

マスコット的なあれがイルカみたいなので。

![スクリーンショット 2014-06-20 23.49.10.png](https://qiita-image-store.s3.amazonaws.com/0/29846/3b9cd61f-1480-6ab2-ab3e-27f384fe3ab1.png "スクリーンショット 2014-06-20 23.49.10.png")

```text
class Dolphin {
    let name: String
    let age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }

    func tellYourName() -> String{
        return self.name
    }

    func areYouOlderThan(age: Int) -> Bool {
        return self.age > age
    }
}
```

イルカは賢いですね！！！

### じゃあspecを書いてみます

`QuickExampleSpec.swift`というファイルを追加しました。

![スクリーンショット 2014-06-21 0.14.15.png](https://qiita-image-store.s3.amazonaws.com/0/29846/e537f27a-da39-aa8c-2247-49b4b308cab4.png "スクリーンショット 2014-06-21 0.14.15.png")

中身はこんなです。デフォルトのテストのコードは捨てました。

```
class DolphinSpec: QuickSpec {
    override func spec() {
        describe("a dolphin") {
            var dolphin: Dolphin?
            beforeEach { dolphin = Dolphin(name: "Nagori Yuki", age: 13) }
            
            it("tells us his name") {
                expect(dolphin!.tellYourName()).to.equal("Nagori Yuki")
            }

            it("tells us if he is older") {
                expect(dolphin!.areYouOlderThan(10)).to.beTrue()
            }
        }
    }
}
```

### 実行

`⌘ + U`


![スクリーンショット 2014-06-21 0.15.45.png](https://qiita-image-store.s3.amazonaws.com/0/29846/626d158a-7aa0-83f0-1774-b5f5a6d5caa4.png "スクリーンショット 2014-06-21 0.15.45.png")

RSpecとかそれインスパイア系のBDDフレームワークを使ったことがあれば、
一瞬で理解できるでしょう。

overrideするメソッド名が3日前にやったときと変わってて動かなかったりして、
生まれたてで日々変わっていってるみたいなので、ちゃんと使うのは落ち着いてからでもいいかなー。