Wie prüfe ich, ob ein UIControlEvents ausgelöst wurde?
Ich habe eine Bibliothek, die ein benutzerdefiniertes @ implementierUIControl
mit einer Methode, die ein @ auslösen wür.valueChanged
event bei Aufruf. Ich möchte die Methode für dieses Verhalten testen.
Mein benutzerdefiniertes Steuerelement:
class MyControl: UIControl {
func fire() {
sendActions(for: .valueChanged)
}
}
Und der Test:
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)
}
}
}
Das Problem ist dasobserve
-Methode wird nie aufgerufen, so dass dasexpectation
ist nicht erfüllt.
Die Frage ist: Wie können wir auf @ testeUIControlEvents
wie in diesem Fall? Vielleicht müssen wir den Runloop irgendwie erzwingen?
EDIT 1: Bitte beachten Sie, dass mein Testziel keine Host-Anwendung hat, da ich eine Bibliothek teste. Der obige Test ist bestanden, wenn das Testziel eine Host-Anwendung hat.