3

我刚刚开始为我的 iOS 应用程序编写测试,我正在使用 Xcode4 和 OCUnit。我现在正在为一段代码编写一个测试,如果已经分配了静态变量,则该代码应该抛出异常,如下所示:

NSAssert(controllerInstance == nil, @"another controller is already in use!");

在我的测试STAssertThrows中,如果实例已经存在,我会检查上面的代码是否会引发错误。问题是这个测试失败了:

*** Assertion failure in (reference to row with NSAssert)

因此,即使行为正是我想要的,测试也失败了。但不应该STAssertThrows抓住这个吗?也许我不应该以这种方式将 NSAssert 与一起使用STAssertThrows

4

1 回答 1

3

我认为断言处理程序会在引发异常之前打印该消息。如果不是这样,STAssertThrows()可能会忽略断言失败。

无论如何,您为什么要测试 NSAssert 是否有效?你不信任 Cocoa 框架吗?

编辑

刚刚注意到您问题的第二部分。答案是否定的,您不应该以这种方式同时使用 STAssertThrows 和 NSAssert。 NSAssert()如果程序员的假设是错误的,是否会出现编程错误的情况。根据定义,一段断言代码失败了它的测试用例。

于 2011-06-21T08:50:33.903 回答