LoginSignup
9
9

More than 5 years have passed since last update.

Expecta

Last updated at Posted at 2014-03-04

マッチャーフレームワーク for Objective-C/Cocoa

ExpectaはGithubのメンバーが作ったマッチャーです。BDDフレームワークであるSpecta(これもGithub製)と組み合わせて使用すると、手軽にテストコードが書けます。特に非同期テストの書きやすさは秀逸です。是非皆さんも一度使ってみることをお勧めします。

このドキュメントは私がspecta/expectaから、自分が必要とする部分のみを抜粋して翻訳したものです。
翻訳に自信がない部分はそのままにしています。

セットアップ

CocoaPodsを使用します。

target :MyApp do
  # your app dependencies
end

target :MyAppTests do
  pod 'Expecta',     '~> 0.2.3'   # expecta matchers
  # pod 'Specta',      '~> 0.1.11'  # specta bdd framework
end

使用準備

// #define EXP_OLD_SYNTAX // enable backward-compatibility
#define EXP_SHORTHAND
#import "Expecta.h"

もしEXP_SHORTHANDが定義されていない場合は、expectの代わりにEXP_expectで記述する必要があります。

Expectaはフレームワークに依存しません。
SpectaGHUnitGTMUnitなどのOCUnit(SenTestingKit)やOCUnitコンパチブルなテストフレームワークと組み合わせて使うことができます。

組込済みのマッチャー

記述 説明
expect(x).to.equal(y); オブジェクトまたはプリミティブxyを比較し、それらが同一(==)または同等(isEqual:)であれば合格
expect(x).to.beIdenticalTo(y); オブジェクトxyを比較し、それらが同一で、同一のメモリアドレスを持っていれば合格
expect(x).to.beNil(); xnilなら合格
expect(x).to.beTruthy(); xがtrue(non-zero)と評価されれば合格
expect(x).to.beFalsy(); xがfalse(zero)と評価されれば合格
expect(x).to.contain(y); NSArrayまたはNSStringのインスタンスxyを含むなら合格
expect(x).to.beSupersetOf(y); NSArray、NSSet、NSDictionary または NSOrderedSetのインスタンスxyの全ての要素を含むなら合格
expect(x).to.haveCountOf(y); NSArray、NSSet、NSDictionaryまたはNSStringxyの数または長さであれば合格
expect(x).to.beEmpty(); NSArray、NSSet、NSDictionaryまたはNSStringxが0の数または長さであれば合格
expect(x).to.beInstanceOf([Foo class]); xがクラスFooのインスタンスであれば合格
expect(x).to.beKindOf([Foo class]); xがクラスfooのインスタンスである、またはxがFooクラスを継承するクラスのインスタンスであれば合格
expect([Foo class]).to.beSubclassOf([Bar class]); クラスFooがクラスBarのサブクラスであるか、クラスBarと同一であれば合格(クラスクラスタのためにbeKindOf()を使用します)
expect(x).to.beLessThan(y); xyより小さければ合格
expect(x).to.beLessThanOrEqualTo(y); xy以下であれば合格
expect(x).to.beGreaterThan(y); xyよりも大きければ合格
expect(x).to.beGreaterThanOrEqualTo(y); xy以上であれば合格
expect(x).to.beInTheRangeOf(y,z); xyzの範囲内であれば合格
expect(x).to.beCloseTo(y); xyに近ければ合格
expect(x).to.beCloseToWithin(y, z); xz内のyに近ければ合格
expect(^{ code }).to.raise(@"ExceptionName"); コードのブロック内でExceptionNameという名前の例外が発生すれば合格
expect(^{ code }).to.raiseAny(); コードのブロック内で任意の例外が発生すれば合格
expect(x).to.conformTo(y); xがプロトコルyに準拠していれば合格
expect(x).to.respondTo(y); xがセレクタyに応答すれば合格
expect( code ).to.notify(@"NotificationName"); コードのブロックがNotificationNameというNSNotificationを生成すれば合格
expect( code ).to.notify(notification); コードのブロックが渡されたnotificationの通知と等しいNSNotificationを生成すれば合格
expect(x).to.beginWith(y); NSString、NSArrayまたはNSOrderedSetのインスタンスxyで始まれば合格(Also aliased by startWith
expect(x).to.endWith(y); NSString、NSArrayまたはNSOrderedSetのインスタンスxyで終われば合格

マッチャーの反転

Every matcher's criteria can be inverted by prepending .notTo or .toNot:
全てのマッチャーは.notTo.toNot を付けることで反転できます。

expect(x).notTo.equal(y); compares objects or primitives x and y and passes if they are not equivalent.

非同期テスト

全てのマッチャーは .will or .willNotを前に付加することによって、非同期のテストを実行することが出来ます。

expect(x).will.beNil(); passes if x becomes nil before the timeout.

expect(x).willNot.beNil(); passes if x becomes non-nil before the timeout.

デフォルトのタイムアウトは1.0秒です。この設定は [Expecta setAsynchronousTestTimeout:x] を呼び出すことで変更できます。
xは希望するタイムアウトの時間です。

9
9
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
9
9