所有调用的 OCMock 存根 class 方法
OCMock stub class method for all invocations
我有一个实用程序 class,其中包含一些 class 方法。
@interface DataValidator : NSObject
+ (BOOL)foo;
@end
class 的用法在其他 class 中,例如 NetworkManager、DBHandler 等。并且由于 Utility class 中没有实例方法,因此不需要any class 创建 Utility class 的实例。相反,他们直接像这样打电话
[Utility foo];
在为 NetworkManager/DBHandler 编写测试时,是否可以模拟 Utility 和存根 foo
,以便对它进行的所有调用 return 模拟响应。
如果我在 NetworkManager class 测试中模拟 Utility class,NetworkManager 代码仍然调用原始方法而不是存根方法。
这仅在我直接从测试内部调用 [Utility foo]
时有效,但这对我来说没有用。
我没能做到这一点。我最终做的是将 class 方法转换为实例方法,然后模拟它们。
看起来 OCMock 3 有办法模拟 Class 方法:
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];
我有一个实用程序 class,其中包含一些 class 方法。
@interface DataValidator : NSObject
+ (BOOL)foo;
@end
class 的用法在其他 class 中,例如 NetworkManager、DBHandler 等。并且由于 Utility class 中没有实例方法,因此不需要any class 创建 Utility class 的实例。相反,他们直接像这样打电话
[Utility foo];
在为 NetworkManager/DBHandler 编写测试时,是否可以模拟 Utility 和存根 foo
,以便对它进行的所有调用 return 模拟响应。
如果我在 NetworkManager class 测试中模拟 Utility class,NetworkManager 代码仍然调用原始方法而不是存根方法。
这仅在我直接从测试内部调用 [Utility foo]
时有效,但这对我来说没有用。
我没能做到这一点。我最终做的是将 class 方法转换为实例方法,然后模拟它们。
看起来 OCMock 3 有办法模拟 Class 方法: 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];