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

Gee*_*eek 38 unit-testing objective-c gh-unit ios ios6

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

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

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

Abi*_*ern 106

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

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

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

@interface SUTClass (Testing)

- (void)somePrivateMethodInYourClass;

@end
Run Code Online (Sandbox Code Playgroud)

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

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

  • 如果在测试类中执行此操作,则只展示测试的方法. (5认同)

Lor*_*olt 7

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

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

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

  • 因此,如果您在没有先编写单元测试的情况下编写了一段代码,那么这不是TDD.但是,假设你的公共方法使用了很少的私有方法,当它失败时你怎么知道哪一个失败? (10认同)