Slide 14
Slide 14 text
別解. sharedExamplesの部分をBehaviorクラスにする例
Behaviorクラスを定義してitBehavesLikeで呼び出す形にする例
振る舞いを別クラスへ切り出しておく様なイメージ:
// イルカが食べて幸せになるBehaviorクラス
final class DolphinEdible: Behavior {
override class func spec(_ context: @escaping () -> Edible) {
// Closureから渡された食べ物を反映する
var edible: Edible!
beforeEach {
edible = context()
}
// 期待した動作になる事を確認する部分を共通化している
it("イルカが食べて幸せになること") {
let dolphin = Dolphin(happy: false)
dolphin.eat(edible)
expect(dolphin.isHappy).to(beTruthy())
}
}
}
// 実際のテストを実行するクラス
final class DolphinBehaviorSpec: QuickSpec {
override func spec() {
describe("イルカ🐬 さんが食べて幸せになるものを調べるテスト") {
context("鯖🐟 さんを食べる場合") {
itBehavesLike(DolphinEdible.self, context: { Mackerel() })
}
context("鱈🐟 さんを食べる場合") {
itBehavesLike(DolphinEdible.self, context: { Cod() })
}
}
}
}
itBehavesLikeにてDolphinEdibleクラスを実行する