所有调用的 OCMock 存根类方法
Posted
技术标签:
【中文标题】所有调用的 OCMock 存根类方法【英文标题】:OCMock stub class method for all invocations 【发布时间】:2015-12-10 12:13:31 【问题描述】:我有一个带有一些类方法的实用程序类。
@interface DataValidator : NSObject
+ (BOOL)foo;
@end
该类的使用在其他类中,比如NetworkManager,DBHandler等。由于Utility类中没有实例方法,因此任何类都不需要创建Utility类的实例。而是像这样直接拨打电话
[Utility foo];
在为 NetworkManager/DBHandler 编写测试时,是否可以模拟 Utility 和存根 foo
,以便对其进行的所有调用都返回模拟响应。
如果我在 NetworkManager 类测试中模拟 Utility 类,NetworkManager 代码仍然调用原始方法而不是存根方法。
这仅在我从测试内部直接调用 [Utility foo]
时才有效,但这在我的情况下没有用。
【问题讨论】:
【参考方案1】:看起来 OCMock 3 有一种模拟类方法的方法: http://ocmock.org/reference/#mocking-class-methods 该页面的示例:
id classMock = OCMClassMock([SomeClass class]);
OCMStub([classMock aClassMethod]).andReturn(@"Test string");
// result is @"Test string"
NSString *result = [SomeClass aClassMethod];
【讨论】:
【参考方案2】:我无法做到这一点。我最终做的是将类方法转换为实例方法,然后模拟它们。
【讨论】:
以上是关于所有调用的 OCMock 存根类方法的主要内容,如果未能解决你的问题,请参考以下文章