如何使用 OCMockito 存根 CocoaLumberjack 或 NSLog
How to stub CocoaLumberjack or NSLog with OCMockito
我可以 stub/verify class 方法,但我在定义宏时遇到困难。我正在尝试测试我的方法之一调用 DDLogInfo。
它在 CocoaLumberjack 源代码中是这样定义的
#define DDLogInfo(frmt, ...) LOG_MAYBE(LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagInfo, 0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
谢谢!
所有标准 DDLog
宏调用 +[DDLog log:level:flag:context:file:function:line:tag:format:]
,因此使用 OCMock,您将验证 DDLogInfo
被调用:
- (void)testMethodCallsDDLogInfo {
id mockDDLog = OCMClassMock([DDLog class]);
[obj methodThatCallsDDLogInfo];
OCMVerify([mockDDLog log:YES level:DDLogLevelAll flag:DDLogFlagInfo context:0 file:[OCMArg anyPointer] function:[OCMArg anyPointer] line:58 tag:[OCMArg any] format:[OCMArg any]]);
}
不幸的是,使用此策略您必须对多个值进行硬编码,因为 OCMock 无法指定通用的非指针参数。
我可以 stub/verify class 方法,但我在定义宏时遇到困难。我正在尝试测试我的方法之一调用 DDLogInfo。
它在 CocoaLumberjack 源代码中是这样定义的
#define DDLogInfo(frmt, ...) LOG_MAYBE(LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagInfo, 0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
谢谢!
所有标准 DDLog
宏调用 +[DDLog log:level:flag:context:file:function:line:tag:format:]
,因此使用 OCMock,您将验证 DDLogInfo
被调用:
- (void)testMethodCallsDDLogInfo {
id mockDDLog = OCMClassMock([DDLog class]);
[obj methodThatCallsDDLogInfo];
OCMVerify([mockDDLog log:YES level:DDLogLevelAll flag:DDLogFlagInfo context:0 file:[OCMArg anyPointer] function:[OCMArg anyPointer] line:58 tag:[OCMArg any] format:[OCMArg any]]);
}
不幸的是,使用此策略您必须对多个值进行硬编码,因为 OCMock 无法指定通用的非指针参数。