我刚开始为我的iOS应用程序编写测试,我正在使用Xcode4和OCUnit。我现在正在为一段代码编写测试,如果已经分配了一个静态变量,它应该抛出异常,如下所示:
NSAssert(controllerInstance == nil, @"another controller is already in use!");
在我的测试中,我使用STAssertThrows
检查上面的代码如果实例已经存在则抛出错误。问题是这个测试失败了:
*** Assertion failure in (reference to row with NSAssert)
因此即使行为正是我想要的行为,测试也会失败。但是STAssertThrows
不应该抓住这个吗?也许我不应该以这种方式将NSAssert与STAssertThrows
一起使用?
答案 0 :(得分:3)
我认为assertion handler会在提出异常之前打印消息。如果不是这样,STAssertThrows()
可能会忽略断言失败。
无论如何,为什么要测试NSAssert的工作原理?你不相信Cocoa框架吗?
修改强>
刚刚注意到你问题的第二部分。答案是否定的,您不应该以这种方式一起使用STAssertThrows和NSAssert。 NSAssert()
可以解决编程错误的情况,其中程序员的假设是错误的。根据定义,断言的一段代码未通过其测试用例。