2016-04-10 3 views
3

Я хочу проверить UIbutton на UIView, имеет соответствующий обработчик.Как проверить UIButton есть цель?

Один из способов я видел:

NSArray *actions = [loginVC.registerBtn actionsForTarget:target forControlEvent:UIControlEventTouchUpInside]; 

Согласно яблоку actionForTraget возвращает действия, выполняемые на целевой объекте при возникновении определенного события.

Но другого пути я видел, как имеющий петлю и проверка 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, они также должны изменить его в своем тесте, или нам нужно пройти тест на провал и обновление теста?

+0

[ThunderCats] (https://github.com/metova/ThunderCats/blob/master/Categories/UIControl%2BTCAdditions.h) имеет для этого способ. – nhgrif

ответ

5

Вы используете петлю с allTargets, если хотите проверить все действия для всех целей.

Вы не используете цикл и просто используете actionsForTarget:forControlEvent:, когда вам нужны только действия для одной известной цели.

Для второй части вашего вопроса, что вы проверяете, зависит от вас. Никто не может ответить на это за вас. Если вам нужно только убедиться, что для мероприятия есть хотя бы одно действие, просто убедитесь, что actions.count является одним или несколькими.

Если вам нужно убедиться, что у него есть действие, и вам нужно убедиться, что действие имеет определенное имя, то код, который вы отправили, является тем, что вам нужно.

Смежные вопросы