由于NSAssert断言失败,测试失败

时间:2011-06-21 08:21:54

标签: objective-c ocunit

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

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

在我的测试中,我使用STAssertThrows检查上面的代码如果实例已经存在则抛出错误。问题是这个测试失败了:

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

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

1 个答案:

答案 0 :(得分:3)

我认为assertion handler会在提出异常之前打印消息。如果不是这样,STAssertThrows()可能会忽略断言失败。

无论如何,为什么要测试NSAssert的工作原理?你不相信Cocoa框架吗?

修改

刚刚注意到你问题的第二部分。答案是否定的,您不应该以这种方式一起使用STAssertThrows和NSAssert。 NSAssert()可以解决编程错误的情况,其中程序员的假设是错误的。根据定义,断言的一段代码未通过其测试用例。