SenTestKit:在所有测试运行后清理?

时间:2010-09-02 19:06:35

标签: unit-testing xcode ocunit

我在XCode中使用SenTest进行单元测试。我必须为我的单元测试运行一个命令行任务来测试。我可以在我的测试类的+ initialize方法(SenTestCase的子类,当然)中这样做。

我想在测试完成后终止命令行任务。由于没有+初始化的反面,我很难过。

是否有某种方法可以将SenTest类子类化为我忽略的那样?

2 个答案:

答案 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捆绑目标的构建阶段)。