レベルが完了した後にタイマーオブジェクトが停止することをテストしようとしています。次のコードがあります。
-(void)advanceLevel {
int nextLevelId = self.currentLevel.id + 1;
self.currentLevel = [[Level alloc] initWithIdentifier:nextLevelId];
[self.timer stop];
[self prepareLevel];
}
..。
prepareLevelメソッドはタイマー値をリセットし、その値に対して「start」を呼び出します---したがって、advanceLevelが実際にタイマーを停止することをテストするには、prepareLevelメソッドを上書きする必要があります。
したがって、単体テストでは、次のことを行いました。
-(void)testItStopsTheTimer {
[timer start];
id mockGame = [OCMockObject partialMockForObject:game];
[[[mockGame stub] andReturn:nil] prepareLevel];
[game advanceLevel];
STAssertFalse(timer.active, nil);
}
その結果、XCodeは「testItStopsTheTimer(Gametests)が失敗しました。Game-0x12383060のサブクラスフォワーダーになりました......」と表示されます。
それで、既存のメソッドをスタブして、それを無に置き換えることはできませんか?