首先要注意的是 OCUnit(又名 SenTestingKit.framework)与 Xcode 集成,但并不是真正的 Xcode 的部分。 OCUnit 最初是第三方代码,后来成为 Objective-C 单元测试的事实上的标准,因此 Apple 采用了它并现在对其进行维护。
更重要的是,您看到的输出似乎有些奇怪。我正在使用 Snow Leopard 附带的 Xcode 3.2.1。我尝试了以下测试:
- (void) testNumbers {
int number1 = 2;
int number2 = 3;
STAssertEquals(number1, number2, nil);
STAssertEquals(4, 5, nil);
}
这是我在 Xcode 构建结果窗格/窗口中看到的错误:
-[ExampleTest testNumbers] : '2' should be equal to '3'
-[ExampleTest testNumbers] : '4' should be equal to '5'
当我双击构建日志中的错误时,Xcode 直接跳转到失败断言的行。
OCUnit 宏当然并不完美,但您在上面使用的示例非常冗长。宏需要 2+ 或 3+ 参数。 (STFail 是一个例外,只需要 1+ 个参数。)最后一个必需的参数始终是描述的可选格式字符串,并且任何其他参数都用于替换这些占位符,就像你对 @ 所做的那样987654324@ 或NSLog()。如果你通过nil,你只会得到默认错误,没有额外的细节。
我通常只在测试确实需要上下文时添加描述。例如,断言的测试和/或主题实际上意味着什么。通常,我只是将这些信息包含在断言周围的 cmets 中。越简单越好。 :-)
要回答您的最后一个问题,目前还没有一种方法可以在 Xcode 中像您在 JUnit 中看到的那样获得红/绿条。这可能是一个不错的补充,但我个人认为这不是关键。 YMMV。