使用OCUnit编写单元测试时,可以在公共接口(.h)中省略测试方法定义。但OCUnit关于公共接口中测试方法定义的最佳实践是什么?
ModelTest.h(未定义测试方法)
@interface ModelTest : SenTestCase
@end
ModelTest.m
@implementation ModelTest : SenTestCase
- (void) testCreation {
...
}
@end
ModelTest.h(带有测试方法定义)
@interface ModelTest : SenTestCase
- (void) testCreation;
@end
我个人认为最好在公共接口中反映一个公共测试方法定义。但最佳做法是什么?是否存在我们无法避免在公共接口中声明这些方法的情况?
答案 0 :(得分:2)
非测试类很少依赖于测试类;没有人会#include你的ModelTest声明。因此,从封装或暴露测试方法中获得的内容并不多。无论如何,测试运动员都会看到它们。
如果要从标头生成文档,则在.h文件中声明它们可能很有用。
有时,您可以定义SenTestCase的子类,为您的测试添加特殊的辅助方法。如果这样做,您可能不希望在超类上公开测试方法。但是,最好从超类中完全删除测试用例,将超类视为只包含辅助方法的抽象接口。
答案 1 :(得分:1)
我不使用单独的.h和.m进行OCUnit测试;一切都进入.m
在界面中添加内容的唯一原因是另一个类可以发现它。但是通过反射找到测试,而不是通过引用测试用例的特定名称的代码。
请参阅https://qualitycoding.org/unit-test-template/了解我使用的模板以及原因。