Ios 课堂部分模拟

Ios 课堂部分模拟,ios,objective-c,unit-testing,ocmock,Ios,Objective C,Unit Testing,Ocmock,我用它来做单元测试。我知道OCMock中有一个函数可以部分模拟对象。我是说这个: [OCMockObject partialMockForObject:anObject] 但是,我有一个只包含类函数的类。例如,MyHelperClazz类,我只是像[MyHelperClazz helperFunc]那样使用它 我需要模拟MyHelperClazz中的一些函数,但对于其他函数,我希望我的测试代码能够运行MyHelperClazz的真正实现。所以,我需要对它进行局部模拟。但它是一个类而不是对象 如

我用它来做单元测试。我知道OCMock中有一个函数可以部分模拟对象。我是说这个:

[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];