Force deletion of singleton in test code that was created with dispatch_once

后端 未结 2 1609
心在旅途
心在旅途 2021-01-23 11:31

I\'m writing some unit test code for a model class and want to simulate the behavior of the class during app exit and relaunch. I could achieve this by deleting and re-allocing

2条回答
  •  孤街浪徒
    2021-01-23 12:01

    static MyModel *singleton = nil;
    static dispatch_once_t onceToken;
    
    + (instancetype) sharedInstance
    {
        dispatch_once(&onceToken, ^ {
            if (singleton==nil){
                singleton = [[MyModel alloc] initSharedInstance];
            }
        });
        return singleton;
    }
    
    +(void)setSharedInstance:(MyModel *)instance {
        onceToken = 0;
        singleton = instance;
    }
    

    Nil it:

    [MyModel setSharedInstance:nil];
    

    Note that you can also set it to an arbitrary class to mock it.

    [MyModel setSharedInstance:someMock];
    

提交回复
热议问题