【发布时间】:2016-07-31 11:07:01
【问题描述】:
我想测试 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 的操作,他们也必须在测试中更改它,还是我们需要让测试失败并更新测试?
【问题讨论】:
-
ThunderCats 有一个方法。
标签: ios objective-c uibutton xctest