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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage