所有调用的 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 存根类方法的主要内容,如果未能解决你的问题,请参考以下文章

OCMock 中的存根类方法

正在测试的类的 OCMock 存根类方法

不能在 Xcode 5.0 中使用 OCMock 2.1+ 存根类方法

如何使用 ocmock 在基于类的方法上存根返回值

在 OCMPartialMock 上存根类方法?

如何使用 ocmock 存根 AppDelegate 上的属性?