LoginSignup
49
42

More than 5 years have passed since last update.

CarthageでQuickを導入してテストを動かしてみるまで

Last updated at Posted at 2016-01-17

導入

この導入項目に関しては基本的には公式に沿ったものを日本語で書いて、適宜補足を入れるかんじの記事になります。
では順を追って説明します。

プロジェクト作成

プロジェクト作りましょう。

Cartfile.privateファイルを作成する

コマンドラインツールでルートディレクトリに移動してtouch Cartfile.privateコマンドを叩きます。
touchコマンドは基本的にはファイルのタイムスタンプを変更するコマンドですが、ファイルが存在しなかった場合は空のファイルが作成されます。

Cartfile.privateについてですが、「.private」ってなんだ?と思って調べたところ、Carthageのコミッターの方のスライドを見つけました。
http://www.slideshare.net/syoikeda/carthagen
スライドの12ページ目によると、「テストターゲット用の依存性などFramework自体のビルドに必要ないものはこちらに」ということでした。
Quickの場合はテストの時のみ使用するので、Cartfile.privateに書くのが適切ですね。

Cartfile.privateファイルに記述する

エディタを開き、Cartfile.privateを編集します。
内容としては以下の通りになります。

github "Quick/Quick"
github "Quick/Nimble"

ライブラリをビルドする

以下のコマンドを打ちます。

carthage update --platform iOS

ビルド物はiOS用しか使わないので、--platform iOSも指定しています。
これでビルドできたはずです。

Link Binary With Librariesに追加する

Carthage/Build/iOSの下にNimble.frameworkとQuick.frameworkがあるはずです。
それをテストターゲットの<プロジェクト名>.xcodeproj -> Build Phases -> Link Binary With Librariesにドラッグ&ドロップします。

スクリーンショット 2016-01-17 18.06.26.png

Copy Files Phaseの項目を追加する

同じくテストターゲットで、Build Phaseを追加します。
左上の方の「+」ボタンをクリックして、New Copy Files Phaseを選択します。

スクリーンショット 2016-01-17 18.13.43.png

Copy Filesに2つのフレームワークを追加する

まずDestinationをFrameworksに変更します。
次にフレームワークを追加したいので、左下の「+」ボタンをクリックします。

スクリーンショット 2016-01-17 18.17.46.png

Nimble.frameworkとQuick.frameworkを選択してAddします。

スクリーンショット 2016-01-17 18.18.59.png

試しにビルドしてみてエラーが出なかったら成功です。

テスト準備

コードを書く

Animal.swift
class Animal {

    private let name: String

    init(name: String)
    {
        self.name = name
    }

    func selfIntroduction() -> String
    {
        return "My name is \(self.name)"
    }

}

テストコードを書く

QuickSampleSpec.swift
import UIKit
import Quick
import Nimble

class QuickSampleSpec: QuickSpec {
    override func spec() {
        describe("a animal") {
            var animal: Animal?
            beforeEach {
                animal = Animal(name: "Pochi")
            }

            it("self-introduction") {
                expect(animal?.selfIntroduction()).to(equal("My name is Pochi"))
            }
        }
    }
}

「describeって何?」的な話は別の記事で書こうと思います。
とりあえず「AnimalクラスのselfIntroductionの戻り値は"My name is Pochi"であるはず」というテストを書きました。

実行

command + U で実行します。Test Succeededと表示されれば成功です。
失敗した場合はこのように期待値と実際の値を表示してくれます。
スクリーンショット 2016-01-17 21.28.11.png

ちなみにテスト実行が2回目以降であればどちらかのチェックマークをクリックしてもテストが実行されます。
(command + Uで実行するとUITestがある場合はそちらも実行されてしまうのでその分時間がかかります)
スクリーンショット 2016-01-17 21.57.02.png

スクリーンショット 2016-01-17 21.54.54.png

余談

たまに引っかかっちゃうんだよな、、、という話。

最初テストクラスを書いていた時にこんな現象が起こりました。
スクリーンショット 2016-01-17 22.11.51.png
Use of undeclared typeエラーが出ているけど、ビルドは成功するし、ちゃんとAnimal.swiftも存在する。

結論から言えばAnimal.swiftがテストターゲットのCompile Sourcesに入っていませんでした。
ということで左ペインでAnimal.swiftをクリックし、右ペインのTarget Membershipの<プロジェクト名>Testsにチェックを入れます。
スクリーンショット 2016-01-17 22.18.10.png
これで無事にエラーがなくなりました。

49
42
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
42