UIControlEventsが発生したかどうかをテストする方法

タンファム

呼び出されたときにイベントUIControlを発生させるメソッドを使用してカスタム実装するライブラリがあります.valueChangedその動作についてメソッドをテストしたいと思います。

私のカスタムコントロール:

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:ライブラリをテストしているため、テストターゲットにホストアプリケーションがないことに注意してください。上記のテストは、テストターゲットにホストアプリケーションがある場合に合格します。

タンファム

UIControlに関するAppleのドキュメントには、次のように記載されています。

コントロール固有のイベントが発生すると、コントロールは関連するアクションメソッドをすぐに呼び出します。アクションメソッドは、現在のUIApplicationオブジェクトを介してディスパッチされます。このオブジェクトは、必要に応じてレスポンダーチェーンに従って、メッセージを処理するための適切なオブジェクトを見つけます。

ときsendActions(for:)Uicontrolの上と呼ばれ、コントロールが呼び出されますUIApplicationさんをsendAction(_:to:from:for:)登録対象にイベントを提供します。

ホストアプリケーションなしでライブラリをテストしているので、UIApplicationオブジェクトはありませんしたがって、.valueChangedイベントはディスパッチされず、observeメソッドは呼び出されません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

特定の文字列がページで発生したかどうかをテストする方法

分類Dev

console.errorがjasminで発生したかどうかをテストする方法

分類Dev

DOMContentLoadedが発生したかどうかを検出する方法

分類Dev

ifステートメントを使用して接続エラーが発生したかどうかを確認する方法

分類Dev

サーバーでエラーが発生したかどうかをテストし、クライアント側を出力する方法

分類Dev

EloquentObserverのメソッドがイベントを発生させるかどうかをテストします

分類Dev

どのような種類のonResumeが発生したかを判断する方法

分類Dev

テーブルの各行の<td>の1つでテキストに変更が発生しているかどうかを検出する方法

分類Dev

パニックが発生したことを確認するRustユニットテストを作成するにはどうすればよいですか?

分類Dev

イベントが発生した回数をテストするLaravelの方法はありますか?

分類Dev

PDFテキストが回転したかどうかを確認する方法

分類Dev

sbtテストが失敗したかどうかを確認する方法は?

分類Dev

どのイベントリスナーが発生したかを確認する方法

分類Dev

角度を設定する-イベントが発生したかどうかを示すための予約スペースがある場合

分類Dev

ローカルストレージで変更が発生したときにビューを自動的に更新する方法はどうですか?

分類Dev

定義されたエピソード中に行が発生したかどうかを判断する方法

分類Dev

Ifステートメントを使用して何かがエラーを発生させるかどうかを確認する

分類Dev

クリックイベントがdivの外部で発生したかどうかを知る方法は?

分類Dev

ifステートメントが常にfalseであるというエラーが発生した場合、どうすればよいですか?

分類Dev

アラートがどこから発生したかを知る方法は?

分類Dev

特定の要素内でスクロールが発生しているかどうかを検出する方法

分類Dev

stringstream演算子>>が不正な型を解析してスキップしたかどうかをテストする方法

分類Dev

エラーが発生するたびにテキストボックスの背景色を変更するにはどうすればよいですか?

分類Dev

ArgumentErrorが発生したかどうかを確認するにはどうすればよいですか?

分類Dev

Rを使用して日付が複数の日付範囲で発生するかどうかをテストします

分類Dev

要素がPythonリストで初めて発生するかどうかを確認します

分類Dev

pytestフィクスチャが例外を発生させるかどうかをテストするにはどうすればよいですか?

分類Dev

TypeError:リスト内の値がdictに存在するかどうかを確認中にエラーが発生しました

分類Dev

Objective C-returnステートメントでautoreleaseが呼び出される前に例外が発生した場合はどうなりますか?

Related 関連記事

  1. 1

    特定の文字列がページで発生したかどうかをテストする方法

  2. 2

    console.errorがjasminで発生したかどうかをテストする方法

  3. 3

    DOMContentLoadedが発生したかどうかを検出する方法

  4. 4

    ifステートメントを使用して接続エラーが発生したかどうかを確認する方法

  5. 5

    サーバーでエラーが発生したかどうかをテストし、クライアント側を出力する方法

  6. 6

    EloquentObserverのメソッドがイベントを発生させるかどうかをテストします

  7. 7

    どのような種類のonResumeが発生したかを判断する方法

  8. 8

    テーブルの各行の<td>の1つでテキストに変更が発生しているかどうかを検出する方法

  9. 9

    パニックが発生したことを確認するRustユニットテストを作成するにはどうすればよいですか?

  10. 10

    イベントが発生した回数をテストするLaravelの方法はありますか?

  11. 11

    PDFテキストが回転したかどうかを確認する方法

  12. 12

    sbtテストが失敗したかどうかを確認する方法は?

  13. 13

    どのイベントリスナーが発生したかを確認する方法

  14. 14

    角度を設定する-イベントが発生したかどうかを示すための予約スペースがある場合

  15. 15

    ローカルストレージで変更が発生したときにビューを自動的に更新する方法はどうですか?

  16. 16

    定義されたエピソード中に行が発生したかどうかを判断する方法

  17. 17

    Ifステートメントを使用して何かがエラーを発生させるかどうかを確認する

  18. 18

    クリックイベントがdivの外部で発生したかどうかを知る方法は?

  19. 19

    ifステートメントが常にfalseであるというエラーが発生した場合、どうすればよいですか?

  20. 20

    アラートがどこから発生したかを知る方法は?

  21. 21

    特定の要素内でスクロールが発生しているかどうかを検出する方法

  22. 22

    stringstream演算子>>が不正な型を解析してスキップしたかどうかをテストする方法

  23. 23

    エラーが発生するたびにテキストボックスの背景色を変更するにはどうすればよいですか?

  24. 24

    ArgumentErrorが発生したかどうかを確認するにはどうすればよいですか?

  25. 25

    Rを使用して日付が複数の日付範囲で発生するかどうかをテストします

  26. 26

    要素がPythonリストで初めて発生するかどうかを確認します

  27. 27

    pytestフィクスチャが例外を発生させるかどうかをテストするにはどうすればよいですか?

  28. 28

    TypeError:リスト内の値がdictに存在するかどうかを確認中にエラーが発生しました

  29. 29

    Objective C-returnステートメントでautoreleaseが呼び出される前に例外が発生した場合はどうなりますか?

ホットタグ

アーカイブ