(假设我有充分的理由不在我的代码中删除我的NSAssert()检查,因为我也在进行单元测试。)
在我的单元测试代码中,我喜欢确保在我调用它时代码中的NSAssert命中(断言)。因此,在调用执行断言的代码时,我使用STAssertThrows()宏。
问题是:尽管文档说NSAssert会抛出异常,但单元测试运行将停止,并显示错误消息,说明应用程序崩溃。
这是模拟器中的SDK 3.1.3。
这是框架中的错误还是我可以做些什么来使这项工作更好,即NSAssert会抛出单元测试宏可以捕获的正确异常?
答案 0 :(得分:1)
我射得太快了。
原来问题出在其他地方:
包含被触发的NSAssert的类不是NSOject的子类。直到现在都没关系,因为它只包含类方法,没有实例方法。但是当NSAssert命中时,它想要获取它所在代码的类名,并且缺少该方法。使这个类成为NSObject的子类修复它,现在NSAssert确实抛出了一个可以由STAssertThrows测试的异常。
我通过在崩溃之前查看单元测试日志中的警告来发现这一点:它警告它找不到methodSignatureForSelector和doesNotRecognizeSelector。添加这些并打印出他们正在寻找的选择器(NSLog(@"sel:%s", aSelector);
)之后,我发现它正在寻找“类”方法。然后我意识到发生了什么。
所以,虽然这是一个没有实际意义的问题,但我希望至少这个解释有一天会帮助某人,或许:)
我不介意删除这个q,或者。