如何测试 BarButtonItem 是不是连接到正确的 IBAction?
Posted
技术标签:
【中文标题】如何测试 BarButtonItem 是不是连接到正确的 IBAction?【英文标题】:How to test BarButtonItem is connected to right IBAction?如何测试 BarButtonItem 是否连接到正确的 IBAction? 【发布时间】:2016-03-16 06:45:19 【问题描述】:我在普通的 UIButton 上看到了这个:
NSArray *actions = [viewController.addButton actionsForTarget:viewController forControlEvent:UIControlEventTouchUpInside];
XCTAssertTrue([actions containsObject:@”addNumbers:”], @””);
但现在我想为 rightBarButtonItem 做同样的事情!我在VC上测试过这个按钮存在但是没有actionForTargets接口!
我也试过了,但是没用:
NSArray *actions = [self.navigationItem.rightBarButtonItem actionsForTarget:self forControlEvent:UIControlEventTouchUpInside];
或
NSArray *actions = [[self.navigationItem.rightBarButtonItem target] actionsForTarget:self forControlEvent:UIControlEventTouchUpInside];
它们都不起作用。任何人都为 UIBarButton 编写了测试代码来检查按钮是否连接到正确的 IBAction?
【问题讨论】:
【参考方案1】:你可以遍历navigationBar的子视图,找到一个UIControl整个allTargets方法包含rightBarButtonItem。
一旦你有了它,你可以在那个 UIControl 上调用 actionForTarget:forControlEvents:,其中 rightBarButtonItem 是目标,UIControl 的 allControlEvents 是 forControlEvents 参数:
//get the underlying control
for(UIControl * control in self.navigationController.navigationBar.subviews)
if([control isKindOfClass:UIControl.class])
//we found the right one
if([control.allTargets containsObject:self.navigationItem.rightBarButtonItem])
NSArray <NSString*> * actions = [control actionsForTarget:self.navigationItem.rightBarButtonItem forControlEvent:[control allControlEvents]];
//do something with actions.firstObject;
return;
但是,我认为 UINavigationBar 的子视图没有公开定义的布局,所以这是一个脆弱的解决方案。
【讨论】:
以上是关于如何测试 BarButtonItem 是不是连接到正确的 IBAction?的主要内容,如果未能解决你的问题,请参考以下文章
执行单元测试时spring boot应用程序是不是需要连接到数据库
如何连接到远程 Windows 机器以使用 python 执行命令?