Abi*_*ern 63 tdd xcode cocoa objective-c ocunit
我正在尝试玩具项目中的测试驱动开发.我可以让我的类的公共接口的测试工作(虽然我仍然在围栏,因为我正在编写比测试方法更多的测试代码).
我倾向于使用很多私有方法,因为我喜欢保持公共接口干净; 但是,我还是想对这些方法进行测试.
由于Cocoa是一种动态语言,我仍然可以调用这些私有方法,但是在我的测试中我得到警告,我的班级可能不会对这些方法做出反应(虽然它显然是这样).由于我喜欢在没有警告的情况下进行编译,因此我的问题是:
Qui*_*lor 125
请记住,在Objective-C中实际上没有"私有方法"这样的东西,而且这不仅仅是因为它是一种动态语言.根据设计,Objective-C具有适用于ivars的可见性修饰符,但不适用于方法 - 您可以调用任何您喜欢的方法,这不是偶然的.
@Peter的建议很棒.为了补充他的答案,我使用的替代方法(当我不想/需要仅用于私有方法的标题时)是在单元测试文件本身中声明一个类别.(我用它@interface MyClass (Test)作为名称.)这是添加在发布代码中不必要膨胀的方法的好方法,例如访问被测试类可以访问的ivars.(当使用属性时,这显然不是问题.)
我发现这种方法可以很容易地公开和验证内部状态,以及添加仅测试方法.例如,在这个单元测试文件中,我编写了一个-isValid验证二进制堆正确性的方法.在生产中,这种方法会浪费空间,因为我假设堆是有效的 - 如果我修改代码,我在测试单元测试回归时只关心它.
Pet*_*sey 89
如何在Xcode中关闭这些警告?
别.
我还能做些什么来关闭这些警告吗?
别.
我在尝试"白盒子"测试时做错了什么?
没有.
解决方案是将您的私有方法移动到其自己的标头中的类别.将此标头导入实际类和测试用例类实现文件.