如何测试 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?的主要内容,如果未能解决你的问题,请参考以下文章

Django - 连接到其他数据库进行测试

执行单元测试时spring boot应用程序是不是需要连接到数据库

如何在 Cypress 测试中连接到 SFTP 服务器?

如何连接到远程 Windows 机器以使用 python 执行命令?

如何在 Spring Boot 测试中连接到内存中的 HSQLDB 以进行查询

如何测试通过xampp连接到mysql db的php登录?