gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 19:01:37 25 4
gpt4 key购买 nike

(假设我有充分的理由不删除代码中的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com