これが私が取ってきたアプローチです。あなたのシングルトンで:
static SomeManager *_sharedInstance = nil;
+(SomeManager *)sharedInstance {
if (_sharedInstance == nil) {
_sharedInstance = [[SomeManager alloc] init];
}
return _sharedInstance;
}
+(void)setSharedInstance:(SomeManager *)instance {
_sharedInstance = instance;
}
次に、テストで:
-(void)testSomethingThatUsesSingleton {
id mockManager = [OCMockObject mockForClass:[SomeManager class]];
[SomeManager setSharedInstance:mockManager];
[[mockManager expect] something];
[controller doSomething];
[mockManager verify];
[SomeManager setSharedInstance:nil];
}
テストの最後にシングルトンを nil に戻すことを忘れないでください。通常、これはtearDown
単体テストの基本クラスで行うため、各テストの後に自動的に行われます。
または、単体テストでオーバーライドsharedInstance
してモック オブジェクトを返すカテゴリを作成することもできます。