【问题标题】:Test view title using XCTest使用 XCTest 测试视图标题
【发布时间】:2013-12-27 10:32:15
【问题描述】:

我正在使用 XCtest 测试视图的标题。试着养成先写测试的习惯。设置看起来像

- (void)setUp
{
    [super setUp];
    self.appDelegate = [[UIApplication sharedApplication] delegate];
    self.tipViewController = self.appDelegate.tipViewController;
    self.tipView = self.tipViewController.view;

    self.settingsViewController = self.appDelegate.settingsViewController;
    self.settingsView = self.settingsViewController.view;
}

问题是“settingsViewController”。我有两个函数用于实际测试:

- (void) testTitleOfMainView{
    XCTAssertTrue([self.tipViewController.title isEqualToString:@"Tip Calculator"], @"The title should be Tip Calculator");
    //why does this not work?
    //    XCTAssertEqual(self.tipViewController.title, @"Tip Calculator", @"The title should be Tip Calculator");
}

- (void) testTitleOfSettingsView{
    //make the setttings view visible
    [self.tipViewController onSettingsButton];

    //test the title
    XCTAssertTrue([self.settingsViewController.title  isEqualToString:@"Settings"], @"The title should be Settings");
}

“testTitleOfMainView”有效。但是“testTitleOfSettingsView 失败,因为 self.settingsViewController 为 nil。我可以理解为什么。视图尚未初始化。所以我尝试将消息发送到将 settignscontroller 显示在视图中的主控制器

[self.tipViewController onSettingsButton];

settingsController 仍然为零。我应该使用模拟吗?有人为我的另一个问题提出了这个建议 xctest - how to test if a new view loads on a button press

我应该子类化设置视图并手动启动它吗?谢谢。

【问题讨论】:

    标签: ios xctest


    【解决方案1】:

    远离在真正的导航堆栈中实际加载视图。真正的 UI 交互通常需要运行循环来接收事件,因此它们无法在快速单元测试中工作。所以扔掉你的设置代码。

    相反,它自己实例化视图控制器,并让它加载:

    - (void)testTitleOfSettingsView
    {
        SettingsViewController *sut = [[SettingsViewController alloc] init];
    
        [sut view];    // Accessing the view causes it to load
    
        XCTAssertEquals(@"Settings", sut.title);
    }
    

    此外,了解 XCTest 中可用的各种断言,而不仅仅是 XCAssertTrue。在这些断言中避免使用 cmets;小测试中的单个断言应该说明一切。

    【讨论】:

    • 再次感谢乔恩!我需要测试真实的交互吗?即便如此,我想我会嘲笑它,就像你在另一个问题中展示的那样。
    • 一般来说,不要害怕使用真正的交互,只要它们速度快并且不会引起持久的变化(这会扰乱其他测试)。换句话说,避免网络、文件系统或持久性数据库。
    • 谢谢乔恩。我正在观看您关于 TDD 的 youtube 系列。对于像我这样的新手来说非常有用!
    猜你喜欢
    • 1970-01-01
    • 2014-03-07
    • 2015-10-08
    • 2013-09-26
    • 2014-12-25
    • 2015-05-22
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多