SenTestKit:在所有测试运行后清理?
Posted
技术标签:
【中文标题】SenTestKit:在所有测试运行后清理?【英文标题】:SenTestKit: cleaning up after ALL tests have run? 【发布时间】:2010-09-02 19:06:34 【问题描述】:我在 XCode 中使用 SenTest 进行单元测试。我必须运行一个命令行任务来测试我的单元测试。我可以在我的测试类(当然是 SenTestCase 的子类)的 +initialize 方法中做到这一点。
我想在测试完成后终止命令行任务。由于没有 +initialize 的反义词,我很难过。
有没有什么方法可以继承 SenTest 类来做到这一点,我忽略了?
【问题讨论】:
【参考方案1】:不要在 +initialize 中运行命令行工具。这是在第一次向类发送any消息时由Objective-C运行时发送的。
改为在测试的+setUp
方法中运行命令行工具。 (请注意,我的意思是+setUp
而不是-setUp
;很多人似乎对类和实例方法之间的区别有点模糊。)
在这种情况下,class setUp
方法在运行 SenTestCase
子类中的 任何 测试之前由 OCUnit 调用,并且 class tearDown
方法由 OCUnit 在 SenTestCase
子类 ar 中的 all 测试后调用。
所以特定SenTestCase
子类的整体流程是:
+setUp
到SomeTestCase
对于从SomeTestCase
开始的每个test
方法(称之为test___
)
创建SomeTestCase
的新实例
发送-setUp
给它
发送-test___
给它
发送-tearDown
给它
释放它
发送+tearDown
到SomeTestCase
这样,如果您在任何 -test
方法运行之前需要完成某些事情,或者在您的所有 -test
方法运行之后需要完成某些事情,那么您可以确定一个点发生这种情况。 (而不是依赖内存管理,这不是确定性的,如果您使用 GC,可能根本不是确定性的。)
【讨论】:
我没有找到任何关于 +setUp/+teardown 方法的内容。感谢您的启发。【参考方案2】:您应该查看Google Toolbox for Mac 或其进一步派生的GHUnit。两者(我认为)都至少提供类级别的设置和拆卸。如果您真的想在运行所有测试之前运行命令行,然后在运行测试后运行第二个命令行(可能会杀死第一个),我会修改运行单元测试的 shell 脚本构建阶段(最后一步在 UnitTest 捆绑目标的构建阶段)。
【讨论】:
你不需要任何额外的框架来进行类级别的设置和拆卸;这些是 OCUnit 的一部分。以上是关于SenTestKit:在所有测试运行后清理?的主要内容,如果未能解决你的问题,请参考以下文章