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