私が開発しているゲームでは、状態が変わったときに通知をトリガーするいくつかのモデルクラスがあります。次に、ビューはそれらの通知にサブスクライブし、それらに応答することができます。OCUnit NSNotificationデリバリーをテストする
私はOCUnitとモデルのための私のユニットテストをやって、そして期待される通知が掲載されたことを主張したいんです。そのために、私はこのような何かをやっている:
- (void)testSomething {
[[NSNotificationCenter defaultCenter] addObserver:notifications selector:@selector(addObject:) name:kNotificationMoved object:board];
Board *board = [[Board alloc] init];
Tile *tile = [Tile newTile];
[board addTile:tile];
[board move:tile];
STAssertEquals((NSUInteger)1, [notifications count], nil);
// Assert the contents of the userInfo as well here
[board release];
}
アイデアはNSNotificationCenter
はそのaddObject:
メソッドを呼び出すことにより、NSMutableArray
に通知を追加することです。
しかし私が実行すると、addObject:
が(NSMutableArray
ではなく)他のオブジェクトに送信されていることがわかり、OCUnitの動作が停止します。しかし、私がコード(例えばrelease
呼び出しや新しい単体テストの追加など)をコメントアウトすると、すべてが期待通りに機能し始めます。
私は、これはいくつかの方法で実行ループに依存するタイミングの問題、またはNSNotificationCenter
とOに持っていると仮定しています。
これをテストする推奨はありますか?私はにセッターを追加し、私自身のNSNotificationCenter
を注入することができると知っていますが、私はそれを行うより速い方法を探しています(NSNotificationCenter
を動的に置き換える方法についてのいくつかのトリックかもしれません)。
+1ユニットテスト通知の巧妙な方法です! –