我正在使用OCMock进行单元测试。我知道OCMock有一个函数可以部分模拟 对象。我是说这个:
[OCMockObject partialMockForObject:anObject]
但是,我有一个只包含类函数的类。例如。 MyHelperClazz
课程,我只使用它[MyHelperClazz helperFunc]
。
我需要在MyHelperClazz
中模拟一些函数,但对于其他函数,我希望我的测试代码能够运行MyHelperClazz
的实际实现。所以,我需要局部嘲笑它。但它是类而不是对象。
如何使用OCMock部分模拟一个类?如果不可能,如何实现我的目标?
答案 0 :(得分:0)
普通的类模拟允许您模拟该类的实例方法,并允许您模拟该类的类方法。请参阅文档:http://ocmock.org/reference/#mocking-class-methods
答案 1 :(得分:0)
我是这样用NSUserDefaults
实现的。
ClassThatUsesNSDefaults *nsDefaultsConsumer = [[ClassThatUsesNSDefaults alloc] init];
// Make an instance of the thing to partially mock
id partialUserDefaultsMock = OCMPartialMock([NSUserDefaults standardUserDefaults]);
// Configure the partial mocked parts
OCMStub([partialUserDefaultsMock boolForKey:@"interesting-key"]).andReturn(YES);
OCMStub([partialUserDefaultsMock stringForKey:@"another-interesting-key"]).andReturn(@"interesting-value");
// Set up a class mock and have a static accessor return your partial mock,
// this even works with nasty singletons.
id mockedUserDefaultsClass = OCMClassMock([NSUserDefaults class]);
OCMStub([mockedUserDefaultsClass standardUserDefaults]).andReturn(partialUserDefaultsMock);
// Test Away
BOOL isEverythingOK = [nsDefaultsConsumer isEverythingOK];
XCTAssertTrue(isEverythingOK);
// Don't forget
[particalUserDefaultsMock stopMocking];
[mockedUserDefaultsClass stopMocking];