如何使用 XCTest 测试一个 navigationBar 是不是未在 Objective-C 中设置为特定颜色?
Posted
技术标签:
【中文标题】如何使用 XCTest 测试一个 navigationBar 是不是未在 Objective-C 中设置为特定颜色?【英文标题】:How do I use XCTest to test if a navigationBar is not set to a specific colour in objective-C?如何使用 XCTest 测试一个 navigationBar 是否未在 Objective-C 中设置为特定颜色? 【发布时间】:2014-03-29 23:31:50 【问题描述】:尝试测试表格视图控制器的导航栏颜色。我已经在表格视图控制器中设置了 navigationController 的 barTintColor。
我写了以下测试:
- (void)testNavBarColourOfMasterViewController
VAGMasterViewController *mvc = [[VAGMasterViewController alloc] init];
[mvc view];
XCTAssertEqualObjects([[[mvc navigationController] navigationBar] barTintColor], [UIColor whiteColor]);
错误:
test failure: -[VAGMasterViewControllerTests testNavBarColourOfMasterViewController] failed: (([[[mvc navigationController] navigationBar] barTintColor]) equal to ([UIColor whiteColor])) failed: ("(null)") is not equal to ("UIDeviceWhiteColorSpace 1 1")
显然,当我尝试读取 barTintColor 的颜色时,它为空。如果在控制器的 viewDidLoad 中设置了怎么会这样呢?
亲切的问候。
【问题讨论】:
您是否记录了 mvc.navigationController 和 mvc.navigationContoller.navigationBar 以确保它们都不为零? 您为什么要开始一个新问题,而不是在同一主题上编辑您现有的问题? How do I return the UIColor of an object in objective c? 的可能重复项 我认为是两个不同的问题。我觉得这个是专门用于 XCTest 的。 @rdelmar 我也记录了两者,但都不是零。 【参考方案1】:只创建一个视图控制器将导致导航控制器(因此,栏)为nil
。解决方案是创建一个导航控制器:
- (void)testNavBarColourOfMasterViewController
VAGMasterViewController *mvc = [[VAGMasterViewController alloc] init];
UINavigationController* nav = [[UINavigationController alloc] initWithRootViewController:mvc];
[mvc view];
XCTAssertEqualObjects([[[mvc navigationController] navigationBar] barTintColor], [UIColor whiteColor]);
另外,在viewDidLoad
中访问导航控制器或其属性(在本例中为 bar)不是一个好习惯,因为视图加载可能在导航控制器与视图控制器链接之前触发,导致问题。
【讨论】:
这很有效,为了消除未使用的 var 警告,我创建了一个本地 var UINavigationController *nav;。我将在 viewWillAppear 或 didAppear 中设置这些属性。 @LondonGuy 在这种情况下,请记住在您的测试中手动调用viewWillAppear:
和viewDidAppear:
,因为当视图进入层次结构时会调用它们,这不会在此处发生。以上是关于如何使用 XCTest 测试一个 navigationBar 是不是未在 Objective-C 中设置为特定颜色?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 XCTest 框架测试基于 REST 的原生 iOS 应用程序?
xctest 如何在另一种测试方法中使用在一种测试方法中捕获的数据