这看起来像是一个oversig在OCMock 3.1中,但如果你愿意,你可以自己修复。
// OCProtocolMockObject.m
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
{
struct objc_method_description methodDescription = protocol_getMethodDescription(mockedProtocol, aSelector, YES, YES);
if(methodDescription.name == NULL)
{
methodDescription = protocol_getMethodDescription(mockedProtocol, aSelector, NO, YES);
}
// Add this case for required class methods
if (methodDescription.name == NULL)
{
methodDescription = protocol_getMethodDescription(mockedProtocol, aSelector, YES, NO);
}
// Add this case for optional class methods
if (methodDescription.name == NULL)
{
methodDescription = protocol_getMethodDescription(mockedProtocol, aSelector, NO, NO);
}
if(methodDescription.name == NULL)
{
return nil;
}
return [NSMethodSignature signatureWithObjCTypes:methodDescription.types];
}
我验证了这个解决与此测试:
- (void)testProtocolClassMethod {
id mockedViewController = OCMProtocolMock(@protocol(AViewControllerProtocol));
// FIXED: This line compiles fine, but throws an exception at run time.
OCMStub([mockedViewController typeForViewController]).andReturn(SomeType);
Type type = [mockedViewController typeForViewController];
XCTAssertEqual(type, SomeType, @"Not equal!");
OCMVerify([mockedViewController typeForViewController]);
}
我会把请求在项目页面上此。
我还没有时间阅读此答案,但它看起来非常感谢。 干得好。 – ajmccall 2014-11-03 09:36:58
使用OCMock 2.2.4并有相同的问题。 – 2014-11-03 09:55:38
我刚刚向主人推荐了一个修复程序。 – 2014-11-19 21:31:22