单元测试私有方法-目标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-27)

测试私有方法

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

我的答案依赖于对一个微妙事实的观察:你已经测试过了你的私人毒品。通过遵循红-绿-重构方法在测试驱动的开发中很常见,您设计了对象的公共API来完成这些对象需要完成的工作通过测试——以及测试的持续执行来确保你没有破坏任何东西——你可以自由地组织内部在你认为合适的情况下给你的班级安装水管。您的私人方法是已经测试过了,因为你所做的只是重构行为你已经有了的测试。

你永远不应该陷入这样的境地其中私有方法未经测试或未完全测试,因为只有当你看到有机会清理公共方法的实施。这确保了方法的存在只是为了支持类的公共行为,并且必须在测试期间调用它们,因为它们肯定是从公共方法调用。

相关内容

  • 没有找到相关文章

最新更新