Ios 课堂部分模拟
我用它来做单元测试。我知道OCMock中有一个函数可以部分模拟对象。我是说这个:Ios 课堂部分模拟,ios,objective-c,unit-testing,ocmock,Ios,Objective C,Unit Testing,Ocmock,我用它来做单元测试。我知道OCMock中有一个函数可以部分模拟对象。我是说这个: [OCMockObject partialMockForObject:anObject] 但是,我有一个只包含类函数的类。例如,MyHelperClazz类,我只是像[MyHelperClazz helperFunc]那样使用它 我需要模拟MyHelperClazz中的一些函数,但对于其他函数,我希望我的测试代码能够运行MyHelperClazz的真正实现。所以,我需要对它进行局部模拟。但它是一个类而不是对象 如
[OCMockObject partialMockForObject:anObject]
但是,我有一个只包含类函数的类。例如,MyHelperClazz
类,我只是像[MyHelperClazz helperFunc]
那样使用它
我需要模拟MyHelperClazz
中的一些函数,但对于其他函数,我希望我的测试代码能够运行MyHelperClazz
的真正实现。所以,我需要对它进行局部模拟。但它是一个类而不是对象
如何使用OCMock部分模拟类?如果不可能,如何实现我的目标?普通类模拟允许您模拟该类的实例方法,并允许您模拟该类的类方法。请参阅文档:普通类mock允许您模拟该类的实例方法,并允许您模拟该类的类方法。请参阅文档:我是用
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];
我是这样通过
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];