11

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

我想在测试完成后终止命令行任务。由于没有 +initialize 的反义词,我很难过。

是否有某种方法可以对 SenTest 类进行子类化来做到这一点,而我忽略了这一点?

4

2 回答 2

36

不要在 +initialize 中运行命令行工具。这是在第一次向类发送任何消息时由 Objective-C 运行时发送的。

+setUp相反,在您的测试方法中运行您的命令行工具。(请注意,我的意思是真的,+setUp而不是-setUp;很多人似乎对类和实例方法之间的区别有点模糊。)

在这种情况下,OCUnit 在子类中的任何测试运行之前调用一个 方法,并且在子类 ar中的所有测试运行之后,OCUnit 调用一个类方法。setUpSenTestCase tearDownSenTestCase

因此,特定SenTestCase子类的整体流程是:

  • 发送+setUpSomeTestCase
  • 对于从(调用它) 开始的每个test方法SomeTestCasetest___
    • 创建一个新的实例SomeTestCase
    • 发送-setUp给它
    • 发送-test___给它
    • 发送-tearDown给它
    • 释放它
  • 发送+tearDownSomeTestCase

这样,如果您需要在任何-test方法运行之前完成某些事情,或者需要在所有-test方法运行之后完成某些事情,那么您可以在某个确定性点上实现这一点。(而不是依赖内存管理,这不是确定性的,如果你使用 GC 可能根本不是确定性的。)

于 2010-09-04T10:45:00.493 回答
0

您应该查看Google Toolbox for Mac或其进一步衍生的GHUnit。两者(我认为)都至少提供类级别的设置和拆卸。如果您真的想在运行所有测试之前运行命令行,然后在运行测试后运行第二个命令行(可能会杀死第一个),我会修改运行单元测试的 shell 脚本构建阶段(最后一步在 UnitTest 捆绑目标的构建阶段)。

于 2010-09-02T19:31:49.003 回答