我有一个带有一些类方法的Utility类。
@interface DataValidator : NSObject
+ (BOOL)foo;
@end
类的用法在其他类中,比如NetworkManager,DBHandler等。由于Utility类中没有实例方法,因此不需要任何类来创建Utility类的实例。相反,他们直接拨打这样的电话
[Utility foo];
在为NetworkManager / DBHandler编写测试时,是否可以模拟Utility和stub foo
,以便对其进行的所有调用都会返回模拟的响应。
如果我在NetworkManager类测试中模拟Utility类,则NetworkManager代码仍会调用原始方法而不是存根方法。
这只有在我从测试中直接调用[Utility foo]
时才有效,但这在我的情况下没用。
答案 0 :(得分:1)
看起来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];
答案 1 :(得分:0)
我无法实现这一目标。我最终做的是将类方法转换为实例方法,然后模拟它们。