首页 > 解决方案 > 在 Singleton 中正确使用 OCMock

问题描述

我想知道使用单例的正确方法是什么。我已经阅读了以下Mocking Singletons 这篇文章很旧,现在我们正在使用OCMock例如OCMPartialMock

@interface ManagerVisitorTests : XCTestCase
@property (nonatomic) id partialManager;
@property (nonatomic) id partialHelper;

@end

@implementation ManagerVisitorTests

static NSString *const key = @"key"; 
- (void)initSDKWithoutVisitor {
    self.partialManager = OCMPartialMock([manager sharedManager]);
    NSDictionary *decodedAppkey = @{};
    OCMStub([self.partialManager methods:OCMOCK_ANY]).andReturn(decodedAppkey);
}

- (void)testInitNoVisitor {
    [self initSDKWithoutVisitor];
    [self.partialManager initSDKWithoutVisitor:key];
    XCTAssertFalse([manager sharedInstance].isInitCalled, @"called");
    //OR
    XCTAssertFalse([self.partialManager sharedInstance].isInitCalled, @"called");
    [self stopAllMocks];
}

- (void)stopAllMocks {
    [self.partialManager stopMocking];
    [self.partialHelper stopMocking];
    self.partialManager = nil;
    self.partialHelper  = nil;
}


@end

我必须承认我并不完全理解幕后OCMock工作的原理,但似乎OCMPartialMock应该根据文档来完成工作这意味着使用对真实对象的引用进行调用,甚至在对象调用自身的方法中包含 self , 也受存根和期望的影响

请建议它是否是单身案例的好方法?

标签: iosobjective-cocmock

解决方案


推荐阅读