iOS
Swift
Quick
Carthage

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

More than 1 year has passed since last update.


導入

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

では順を追って説明します。


プロジェクト作成

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


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

これで無事にエラーがなくなりました。