iOS:使用 XCTest 对 UIViewController 组件进行单元测试

Posted

技术标签:

【中文标题】iOS:使用 XCTest 对 UIViewController 组件进行单元测试【英文标题】:iOS: Unit Testing UIViewController Components with XCTest 【发布时间】:2015-09-21 09:43:31 【问题描述】:

我正在 Swift 的视图控制器中对 ios UIButton 的功能进行单元测试。该按钮的预期功能如下:

    按钮最初的标题是“开始” 按下按钮后,标题变为“暂停”

简而言之,我想测试一下按钮被点击后,按钮的标题从“开始”变为“暂停”。

因为系统在更改发生并呈现在屏幕上之前需要一点时间,所以我需要轮询一小段时间来检查按钮的当前标题,直到按钮标题更改或分配的时间用完了。

通常,我使用 Quick/Nimble 框架进行单元测试,并使用expect(...).toEventually(...) 函数来测试这种轮询。但是,我的团队坚持我使用 XCTest 框架是为了保持一致性,所以我必须找到一些优雅的方式来使用 XCTest 实现测试。

您对 XCTest 框架的实现有什么建议吗?

【问题讨论】:

【参考方案1】:

我能想出的解决方案是使用NSTimer,它每隔一小段时间触发一次条件检查,直到指定的时间用完,然后使用XCTestExpectationwaitForExpectationsWithTimeout 等待完成。 (查看更多关于 XCTestExpectation here)

有没有更好的方法来实现这个单元测试?

【讨论】:

以上是关于iOS:使用 XCTest 对 UIViewController 组件进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

XCTest/XCTest.h 文件未找到 XCode 5.1.1 iOS7

如何使用 XCTest 框架测试基于 REST 的原生 iOS 应用程序?

iOS测试-如何指标量化app耗电量和性能XCTest Metrics

使用 XCTest 和单独文件进行 iOS 测试

如何使用 XCTest for iOS 14 取消通话

iOS:如何在设备上运行 XCTest?