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的测试用例类中是不是需要在公共接口中定义测试方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在多个 OCUnit 测试用例之间共享代码?

OCUnit 测试在未测试的类中给出错误

unittest上下关联关系的接口——继承测试用例类

unittest 用例编写,套件执行

10_Pytest框架

接口自动化框架模型设计