ios - 在 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 , 也受存根和期望的影响
请建议它是否是单身案例的好方法?
解决方案
推荐阅读
- react-native - 在 React Native 中使用情感
- unity3d - 如何制作动画以使角色不停地行走?
- arduino - Arduino 客户端无法连接到主机名服务器
- ruby - 遍历活动记录中数组中的元素
- c# - 查找 Windows 会话 LDAP 用户名时出错 - C#
- airflow - 根据 dagfile 定义代码每天/定期更新气流 dag
- .net-core - 从 JSON 创建一个 JsonWebKey
- matlab - 替换文本文件中的特定行
- c - 数组某些部分的 atoi() 输出错误
- apache-kafka - 如何使用spring kafka设置多个生产者和消费者对象?