UIViewにUIbuttonをテストしたいのですが、適切なハンドラがあります。指定したイベントが発生したときに、対象物に対して実行されるアクションを返しactionForTraget
アップルによるとUIButtonの確認方法にはターゲットがありますか?
NSArray *actions = [loginVC.registerBtn actionsForTarget:target forControlEvent:UIControlEventTouchUpInside];
:私が見てきた
一つの方法です。
しかし、私が見た他の方法は、ループを有するallTargetsをチェックしている:
for (id target in loginVC.registerBtn.allTargets) {
NSArray *actions = [loginVC.registerBtn actionsForTarget:target forControlEvent:UIControlEventTouchUpInside];
XCTAssertEqual(actions.count, 1);
SEL handler = NSSelectorFromString(actions[0]);
XCTAssertTrue([loginVC respondsToSelector:handler]);
}
リンゴの文献によれば:
allTargets
:コントロールに関連付けられているすべてのターゲットオブジェクトを返します。
ループを持たないという違いは何ですか?いつループする必要があり、actionForTargetを取得する必要があるのですか?
NSArray *actions = [loginVC.registerBtn actionsForTarget:target forControlEvent:UIControlEventTouchUpInside];
XCTAssertTrue([actions containsObject:@"onRegisterButtonPressed:"]);
のベストプラクティスは何ですか:私の質問の
第二部は、我々のボタンは、ターゲットを持っているか、また、次のようにアクションを実行するために接続されている方法をチェックチェックする必要があるだけでしょうか?
開発者がUIButtonのアクションを処理するために異なるメソッドを変更した場合、テストで変更する必要がありますか、テストを失敗させてテストを更新する必要がありますか?
[ThunderCats](https://github.com/metova/ThunderCats/blob/master/Categories/UIControl%2BTCAdditions.h)にはそのための方法があります。 – nhgrif