如何使用iPhone的单元测试框架测试NSAssert命中案例

时间:2010-04-11 15:56:27

标签: iphone unit-testing

(假设我有充分的理由不在我的代码中删除我的NSAssert()检查,因为我也在进行单元测试。)

在我的单元测试代码中,我喜欢确保在我调用它时代码中的NSAssert命中(断言)。因此,在调用执行断​​言的代码时,我使用STAssertThrows()宏。

问题是:尽管文档说NSAssert会抛出异常,但单元测试运行将停止,并显示错误消息,说明应用程序崩溃。

这是模拟器中的SDK 3.1.3。

这是框架中的错误还是我可以做些什么来使这项工作更好,即NSAssert会抛出单元测试宏可以捕获的正确异常?

1 个答案:

答案 0 :(得分:1)

我射得太快了。

原来问题出在其他地方:

包含被触发的NSAssert的类不是NSOject的子类。直到现在都没关系,因为它只包含类方法,没有实例方法。但是当NSAssert命中时,它想要获取它所在代码的类名,并且缺少该方法。使这个类成为NSObject的子类修复它,现在NSAssert确实抛出了一个可以由STAssertThrows测试的异常。

我通过在崩溃之前查看单元测试日志中的警告来发现这一点:它警告它找不到methodSignatureForSelector和doesNotRecognizeSelector。添加这些并打印出他们正在寻找的选择器(NSLog(@"sel:%s", aSelector);)之后,我发现它正在寻找“类”方法。然后我意识到发生了什么。

所以,虽然这是一个没有实际意义的问题,但我希望至少这个解释有一天会帮助某人,或许:)

我不介意删除这个q,或者。