如何使用 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 测试线程安全性

如何使用 XCTest 框架测试基于 REST 的原生 iOS 应用程序?

xctest 如何在另一种测试方法中使用在一种测试方法中捕获的数据

XCTest 示例,如何从 XCTest 开始?

如何使用 XCTest 在以编程方式添加的 UIView 上测试 UILabel

iOS:如何在设备上运行 XCTest?