在我的应用程序中,我有一个单例类。这样实现:
@implementation PTKRGlobal
static PTKRGlobal *instance = nil;
+(PTKRGlobal *)shared
{
@synchronized(self)
{
if(instance==nil)
{
instance= [PTKRGlobal new];
}
}
return instance;
}
此类的头文件具有各种单例属性,如codedatamanager:
@interface PTKRGlobal : NSObject
+(PTKRGlobal *)shared;
@property (strong, nonatomic) PTKRCoraDataManager *coreDataManger;
这允许我使用以下方式致电经理:
[[PTKRGlobal shared] coreDataManager]
在appdeleget中我设置了经理:
[[PTKRGlobal shared] setCoreDataManger:[PTKRCoraDataManager new]];
运行单元测试时,我有一个带有一些差异的子类PTKRCoreDataManager。然而,当我尝试在单元测试[[PTKRGlobal shared] setCoreDataManger:[PTKRTestCoreDataManager new]];
中设置核心数据管理器时,我发现该变量已经设置并且不允许重新分配。
可以推测PTKRGlobal是在我认为运行单元测试之前运行的功能测试运行期间创建的。我通过在app委托中放置一个断点并在单元测试setUp中放置一个断点并比较输出os po [[PTKRGlobal shared] coreDataManager]
如何在单元测试开始前重置此单例?
答案 0 :(得分:1)
向班级添加方法:
+ (void)destroySingleton {
instance = nil;
}
并在单元测试的tearDown
方法中调用它。
- (void)tearDown {
[PTKRGlobal destroySingleton];
[super tearDown];
}
请注意,您可能不希望在实际应用中公开显示此内容,因此只需在.m
文件中添加此方法即可。
然后在单元测试的.m
中,在单元测试的@implementation
之上,添加以下内容:
@interface PTKRGlobal (UnitTesting)
+ (void)destroySingleton
@end