Objective c 强制删除使用dispatch_创建的测试代码中的单例
我正在为一个模型类编写一些单元测试代码,并希望在应用程序退出和重新启动期间模拟该类的行为。我可以通过删除并重新分配对象来实现这一点,但是它是一个单例,因此以下代码没有达到预期效果:Objective c 强制删除使用dispatch_创建的测试代码中的单例,objective-c,Objective C,我正在为一个模型类编写一些单元测试代码,并希望在应用程序退出和重新启动期间模拟该类的行为。我可以通过删除并重新分配对象来实现这一点,但是它是一个单例,因此以下代码没有达到预期效果: + (id) sharedInstance { static MyModel *singleton = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^ { singleton = [
+ (id) sharedInstance
{
static MyModel *singleton = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^ {
singleton = [[MyModel alloc] initSharedInstance];
});
return singleton;
}
// Test code:
MyModel* gModel = [MyModel sharedInstance];
... tests
gModel = nil;
gModel = [MyModel sharedInstance];
... more tests
是否有一个简洁的解决方案,以便我可以删除/重新创建对象?如果这样的解决方案适合单元测试,您可以在prod中关闭它:
static MyModel *singleton = nil;
+ (id) sharedInstance
{
if(!singleton)
{
singleton = [self new];
}
return singleton;
}
+ (void)resetSingleton
{
[singlelton release];
singleton = nil;
}
无:
[MyModel setSharedInstance:nil];
注意,您还可以将其设置为任意类来模拟它
[MyModel setSharedInstance:someMock];
请注意,这不是线程安全的,因为once令牌的重新初始化没有内存障碍
[MyModel setSharedInstance:someMock];