ページ

2016年3月27日日曜日

SwiftでRSpecみたいに書けるQuickを使ってみる 2


前回の続きになりますが、
色々な使い方を見てみたいと思います。
Nimbleassertionにどんなものがあるか確認してみます。

等価


同じ値を持っているか?をテストする
// 等しければテスト成功
expect(実際の値).to(equal(期待値))
expect(実際の値) == 期待値

// 等しくなければテスト成功
expect(実際の値).toNot(equal(期待値))
expect(実際の値) != 期待値

// 浮動小数点の等価テスト
expect(実際の値).to(beCloseTo(期待値, within: マージン値))
比較するオブジェクトはEquatableComparableプロトコルを実装または、
NSObjectのサブクラスでないと正しく比較されない
また、浮動小数点の等価テストの場合マージン値を設定します。
例)
expect(10.01).to(beCloseTo(10, within: 0.1)) // -> テスト成功

同一性


同じアドレスを指しているオブジェクトか?をテストする
// 同じアドレスを指していればテスト成功
expect(実際の値).to(beIdenticalTo(期待値))
expect(実際の値) === 期待値

// 同じアドレスを指していなければテスト成功
expect(実際の値).toNot(beIdenticalTo(期待値))
expect(実際の値) !== 期待値

比較


expect(実際の値).to(beLessThan(期待値))
expect(実際の値) < 期待値

expect(実際の値).to(beLessThanOrEqualTo(期待値))
expect(実際の値) <= 期待値

expect(実際の値).to(beGreaterThan(期待値))
expect(実際の値) > 期待値

expect(実際の値).to(beGreaterThanOrEqualTo(期待値))
expect(実際の値) >= 期待値
こちらもComparableプロトコルを実装しているオブジェクトである必要があります

クラス型


インスタンスのクラスが期待値のクラス又はサブクラスかテストします
// インスタンスがクラスのインスタスである場合テスト成功
expect(インスタンス).to(beAnInstanceOf(クラス))

// インスタンスがクラス又は寒クラスのインスタスである場合テスト成功
expect(インスタンス).to(beAKindOf(クラス))

Error Handling


Swift2.0のError Handlingのテストです。
Error Handlingとは?
Swift2.0から導入されたJava等で言う例外処理のこと
例)
// ErrorTypeプロトコルを実装したenumを作成
enum MyError: ErrorType {
    case InvalidNumber
    case OutOfRange
}
// エラーを投げる可能性があるメソッド
func something(number: Int?) throws {
    if (number == nil) { // 不正な値
        throw MyError.InvalidNumber
    }
    if (number > 50) { // 範囲外
        throw MyError.OutOfRange
    }
}
// エラーハンドリング
do {
    try something(60)
} catch {
    print("catch error") // エラーをキャッチ
}
上のようなMyErrorをthrowするメソッドのテストをQuickで行う場合
throwErrorを使用してテストを行う。
// エラーがthrowされればテスト成功
// (引数に70を指定しているのでMyError.OutOfRangeがthrowされる)
expect{ try something(70) }.to(throwError())
// エラーの型が`MyError`であればテスト成功
// 引数がnilの為`MyError.InvalidNumber`をthrowする
expect{ try something(nil) }.to(throwError(errorType: MyError.self))

0 件のコメント:

コメントを投稿