繁体   English   中英

单元测试私有方法 - 目标C.

[英]Unit testing private method - objective C

我使用GHUnit 我想单独测试私有方法,不知道如何测试它们。 我找到了很多关于为什么不测试私有方法的答案。 但没有找到如何测试它们。

我不想讨论是否应该测试私有,但是会关注如何测试它。

谁能给我一个如何测试私有方法的例子?

Objective-C中的方法并不是真正的私有。 您收到的错误消息是编译器无法验证您调用的方法是否存在,因为它未在公共接口中声明。

解决这个问题的方法是在类类别中公开私有方法,它告诉编译器方法存在。

所以在测试用例文件的顶部添加这样的内容:

@interface SUTClass (Testing)

- (void)somePrivateMethodInYourClass;

@end

SUTClass是您为其编写测试的类的实际名称。

这将使您的私有方法可见,并且您可以在没有编译器警告的情况下对其进行测试。

有点晚了,但我刚上了TDD列车。

不应测试私有方法。 因为您编写私有方法来支持您的公共方法,因此测试您的公共方法会间接测试支持它们的私有方法。

原则“不应该测试私有方法”的原则是“当你需要测试私有方法时,它可能意味着你应该将这些方法移动到单独的类” ,从而使它们公开。

同意@Lord Zsolt

另请注意下一步(来自测试驱动的iOS开发 ISBN-10:0-321-77418-3,ISBN-13:978-0-321-77418-7)

测试私有方法

我经常被问到,“我应该测试我的私人方法吗?”或相关问题“我应该如何测试我的私人方法?”人们问第二个问题假设第一个问题的答案是“是”,现在正在寻找一种在其测试套件中公开其类的私有接口的方法。

我的回答依赖于观察一个微妙的事实:你已经测试了你的私人方法。 通过遵循测试驱动开发中常见的红绿重构方法,您设计了对象的公共API来完成这些对象需要执行的工作。 通过测试指定的工作 - 并继续执行测试,确保您没有破坏任何东西 - 您可以自由地组织您认为合适的类的内部管道。 您的私有方法已经过测试,因为您所做的只是您已经测试过的重构行为。

您永远不应该在私有方法未经测试或未经完全测试的情况下结束,因为只有在您看到清理公共方法实现的机会时才创建它们。 这确保了私有方法的存在只是为了支持类的公共行为,并且必须在测试期间调用它们,因为它们肯定是从公共方法调用的。

如果方法是私有的,那么你永远不应该测试它。

想想这个。 您应该测试方法的行为和合同,而不是内部实现

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM