【问题标题】:Protocol method is not invoked for OCUnit testingOCUnit 测试不调用协议方法
【发布时间】:2013-01-29 11:06:15
【问题描述】:

我有一个编写 OCUnit 测试 Caes 的协议

@interface ClassDeclaration: NSObject{

... Varables 
}
... Methods
// Protocol declartion!
@end
@protocol Message <NSObject>

-(BOOL) isValid;

@end

实现方法写在另一个名为'NewClassName'的类中

-(BOOL) isValid{

    return (self.message != nil);
}

现在!

我正在为协议方法编写测试用例!

-(void)testIsValid{
    ClassDeclaration *obj = [[ClassDeclaration alloc] init];
    SEL methodName = @selector(isValid);
    BOOL test = [obj respondsToSelector:methodName];
}

我的问题是我可以为协议方法编写测试用例吗?

我试图为测试用例调用方法SEL methodName = @selector(isValid);,这个方法没有调用我不知道为什么?谁能告诉我协议方法会在运行时调用,那么如何通过单元测试调用这个方法?

@All 提前致谢!

【问题讨论】:

  • @All 任何人都可以指导我解决这个问题!

标签: iphone ipad unit-testing


【解决方案1】:

这个问题被问到已经有一段时间了,但如果有人偶然发现这个问题,我有一个答案。

查看 OCMock 框架。有了它,您可以模拟对象和协议等。你可以找到框架here 和功能看here

OCMock 有一个类方法,您可以使用它来为协议创建模拟:

+mockForProtocol:

如 ocmock.org/features 所述,您可以使用以下方法创建模拟:

id aMock = [OCMockObject mockForProtocol:@protocol(SomeProtocol)]

还有一个描述:

创建一个可以像实现 SomeProtocol 的对象的实例一样使用的模拟对象。

这就是主题。了解OCMock的使用方法,可以参考以下帖子:

除了这些链接之外,您还可以获得here发布的链接背后的信息。

嘲讽快乐! 汤姆特

【讨论】:

    猜你喜欢
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    相关资源
    最近更新 更多