上课的部分模拟

时间:2016-06-28 14:13:36

标签: ios objective-c unit-testing ocmock

我正在使用OCMock进行单元测试。我知道OCMock有一个函数可以部分模拟 对象。我是说这个:

[OCMockObject partialMockForObject:anObject]

但是,我有一个只包含类函数的类。例如。 MyHelperClazz课程,我只使用它[MyHelperClazz helperFunc]

我需要在MyHelperClazz中模拟一些函数,但对于其他函数,我希望我的测试代码能够运行MyHelperClazz的实际实现。所以,我需要局部嘲笑它。但它是而不是对象

如何使用OCMock部分模拟一个类?如果不可能,如何实现我的目标?

2 个答案:

答案 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];