導入
この導入項目に関しては基本的には公式に沿ったものを日本語で書いて、適宜補足を入れるかんじの記事になります。
では順を追って説明します。
プロジェクト作成
プロジェクト作りましょう。
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にドラッグ&ドロップします。
Copy Files Phaseの項目を追加する
同じくテストターゲットで、Build Phaseを追加します。
左上の方の「+」ボタンをクリックして、New Copy Files Phaseを選択します。
Copy Filesに2つのフレームワークを追加する
まずDestinationをFrameworksに変更します。
次にフレームワークを追加したいので、左下の「+」ボタンをクリックします。
Nimble.frameworkとQuick.frameworkを選択してAddします。
試しにビルドしてみてエラーが出なかったら成功です。
テスト準備
コードを書く
class Animal {
private let name: String
init(name: String)
{
self.name = name
}
func selfIntroduction() -> String
{
return "My name is \(self.name)"
}
}
テストコードを書く
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と表示されれば成功です。
失敗した場合はこのように期待値と実際の値を表示してくれます。
ちなみにテスト実行が2回目以降であればどちらかのチェックマークをクリックしてもテストが実行されます。
(command + Uで実行するとUITestがある場合はそちらも実行されてしまうのでその分時間がかかります)
余談
たまに引っかかっちゃうんだよな、、、という話。
最初テストクラスを書いていた時にこんな現象が起こりました。
Use of undeclared typeエラーが出ているけど、ビルドは成功するし、ちゃんとAnimal.swiftも存在する。
結論から言えばAnimal.swiftがテストターゲットのCompile Sourcesに入っていませんでした。
ということで左ペインでAnimal.swiftをクリックし、右ペインのTarget Membershipの<プロジェクト名>Testsにチェックを入れます。
これで無事にエラーがなくなりました。