OCUnit的测试用例类中是不是需要在公共接口中定义测试方法
Posted
技术标签:
【中文标题】OCUnit的测试用例类中是不是需要在公共接口中定义测试方法【英文标题】:Do you need to define test methods in the public interface in OCUnit's test case classOCUnit的测试用例类中是否需要在公共接口中定义测试方法 【发布时间】:2013-03-25 20:02:31 【问题描述】:使用 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
我个人认为在公共接口中反映公共测试方法定义会更好。但最佳实践是什么?是否存在无法避免在公共接口中声明这些方法的情况?
【问题讨论】:
【参考方案1】:非测试类很少依赖测试类;没有人会#include 你的 ModelTest 声明。因此,封装或公开测试方法并没有太多好处。无论如何,测试运行者都会看到它们。
如果您从标头生成文档,在 .h 文件中声明它们可能会很有用。
有时,您可能会定义一个 SenTestCase 的子类,为您的测试添加特殊的辅助方法。如果你这样做,你可能不想在超类上公开测试方法。但是,最好从超类中完全删除测试用例,将超类视为仅包含辅助方法的抽象接口。
【讨论】:
【参考方案2】:我不使用单独的 .h 和 .m 进行 OCUnit 测试;一切都进入.m
在接口中放一些东西的唯一原因是让另一个类可以发现它。但是测试是通过反射找到的,而不是通过引用特定测试用例名称的代码。
请参阅 https://qualitycoding.org/unit-test-template/ 了解我使用的模板以及原因。
【讨论】:
感谢完全不使用 .h 文件进行单元测试很有趣。以上是关于OCUnit的测试用例类中是不是需要在公共接口中定义测试方法的主要内容,如果未能解决你的问题,请参考以下文章