我在 XCode 中使用 SenTest 进行单元测试。我必须运行一个命令行任务来测试我的单元测试。我可以在我的测试类(当然是 SenTestCase 的子类)的 +initialize 方法中做到这一点。
我想在测试完成后终止命令行任务。由于没有 +initialize 的反义词,我很难过。
是否有某种方法可以对 SenTest 类进行子类化来做到这一点,而我忽略了这一点?
我在 XCode 中使用 SenTest 进行单元测试。我必须运行一个命令行任务来测试我的单元测试。我可以在我的测试类(当然是 SenTestCase 的子类)的 +initialize 方法中做到这一点。
我想在测试完成后终止命令行任务。由于没有 +initialize 的反义词,我很难过。
是否有某种方法可以对 SenTest 类进行子类化来做到这一点,而我忽略了这一点?
不要在 +initialize 中运行命令行工具。这是在第一次向类发送任何消息时由 Objective-C 运行时发送的。
+setUp
相反,在您的测试方法中运行您的命令行工具。(请注意,我的意思是真的,+setUp
而不是-setUp
;很多人似乎对类和实例方法之间的区别有点模糊。)
在这种情况下,OCUnit 在子类中的任何测试运行之前调用一个类 方法,并且在子类 ar中的所有测试运行之后,OCUnit 调用一个类方法。setUp
SenTestCase
tearDown
SenTestCase
因此,特定SenTestCase
子类的整体流程是:
+setUp
至SomeTestCase
test
方法SomeTestCase
test___
SomeTestCase
-setUp
给它-test___
给它-tearDown
给它+tearDown
至SomeTestCase
这样,如果您需要在任何-test
方法运行之前完成某些事情,或者需要在所有-test
方法运行之后完成某些事情,那么您可以在某个确定性点上实现这一点。(而不是依赖内存管理,这不是确定性的,如果你使用 GC 可能根本不是确定性的。)
您应该查看Google Toolbox for Mac或其进一步衍生的GHUnit。两者(我认为)都至少提供类级别的设置和拆卸。如果您真的想在运行所有测试之前运行命令行,然后在运行测试后运行第二个命令行(可能会杀死第一个),我会修改运行单元测试的 shell 脚本构建阶段(最后一步在 UnitTest 捆绑目标的构建阶段)。