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

标签 iphone unit-testing

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

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

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

模拟器中使用的是 SDK 3.1.3。

这是框架中的错误还是我可以采取一些措施来使其更好地工作,即 NSAssert 抛出单元测试宏可以捕获的正确异常?

最佳答案

我射得太快了。

事实证明问题出在其他地方:

包含触发的 NSAssert 的类不是 NSOject 的子类。到目前为止这还可以,因为它只包含类方法,没有实例方法。但是当 NSAssert 命中时,它想要获取它所在代码的类名,而该方法丢失了。使此类成为 NSObject 的子类修复了该问题,现在 NSAssert 确实抛出了异常,可以通过 STAssertThrows 进行测试。

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

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

不过,我也不介意删除这个 q。

关于iphone - 如何使用 iPhone 的单元测试框架测试 NSAssert 命中案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2617611/

相关文章:

iphone - 我们可以通过蓝牙将多少台设备与 iPhone 配对?

javascript - 开 Jest 返回错误: SyntaxError: 'import' and 'export' may appear only with 'sourceType: "module"' (21:0)

javascript - enzyme .eq() 还是.index()?

c# - ExpectedException 属性用法

unit-testing - 单元测试大数据的方法

ios - 在 Parse Cloud 或 healthkit 中存储 StepCount 的推荐方法是什么?

iphone - 批量获取数据并存储到NSMutableArray中,以便在iphone中的UITableView中显示

ios - iOS 应用程序的功耗

ios - 我在 iOS pod lib lint 命令上收到 "WARN | url: (homepage) The URL is not reachable."?

java - Mockito 中未调用嵌套模拟方法