我有一个库实现自定义UIControl
的方法,该方法在调用时会触发一个.valueChanged
事件。我想测试该行为的方法。如何测试UIControlEvents是否已被触发
我的自定义控件:
class MyControl: UIControl {
func fire() {
sendActions(for: .valueChanged)
}
}
而且测试:
import XCTest
class ControlEventObserver: NSObject {
var expectation: XCTestExpectation!
init(expectation anExpectation: XCTestExpectation) {
expectation = anExpectation
}
func observe() {
expectation.fulfill()
}
}
class Tests: XCTestCase {
func test() {
let myExpectation = expectation(description: "event fired")
let observer = ControlEventObserver(expectation: myExpectation)
let control = MyControl()
control.addTarget(observer, action: #selector(ControlEventObserver.observe), for: .valueChanged)
control.fire()
waitForExpectations(timeout: 1) { error in
XCTAssertNil(error)
}
}
}
的问题是observe
方法不会被调用,因此expectation
没有实现。
问题是:我们如何在这种情况下测试UIControlEvents
?也许我们需要以某种方式强制runloop?
编辑1: 请注意,由于我正在测试库,我的测试目标没有任何主机应用程序。当测试目标具有主机应用程序时,上述测试通过。
这很奇怪我已经在我创建的项目中复制并粘贴了您的代码,并且期望已全满,测试成功通过。 – Wilson
刚刚意识到这可能是因为我正在测试一个库。当我使用主机应用程序创建另一个测试目标时,上面的测试通过。 @WilsonBalderrama –