2014-01-05 39 views
1

我想单元测试自定义单元是否注册了tableView如何测试自定义单元格是否已使用tableView注册?

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UINib *nib = [UINib nibWithNibName:@"FTStatsCellView" bundle:nil]; 
    [[self tableView] registerNib:nib forCellReuseIdentifier:@"FTStatsCellView"]; 
} 

单元测试:

-(void)testIfCustomCellsAreRegisteredToTable 
{ 
    [viewController viewDidLoad]; 
    FTStatsCellView *cell = [[viewController tableView] dequeueReusableCellWithIdentifier:@"FTStatsCellView"]; 
    XCTAssertNotNil(cell, @"Custom cell FTStatsCellView is not registered with the table."); 
} 

测试失败并显示消息:

[FTStatsViewControllerTests testIfCustomCellsAreRegisteredToTable] 失败:在束无法加载NIB:“一个NSBundle (已加载)',名称为'FTStatsCellView'

有什么建议吗?感谢

更新

如果我点击该项目,从没有到应用程序更改test target的目标,那么它的工作原理。

enter image description here

但是,这有一个应用程序在模拟器我要运行单元测试每次运行的副作用。

enter image description here

有什么建议吗?

+1

您是否将笔尖包含在测试目标中? – Wain

+0

看来我有一个类似的问题,因为在这里:http://stackoverflow.com/questions/1879247/why-cant-code-inside-unit-tests-find-bundle-resources但不知道如何将路径与'nibWithNibName'。 – Houman

+0

Btw xib文件已经检查了测试目标成员资格。它包含在测试目标的'copy bundle resources'中。我卡住了...... – Houman

回答

1

设置目标为测试目标指定BUNDLE_LOADER和TEST_HOST。运行单元测试时,这是必要的顺序如下:

  1. Xcode中启动您的应用在模拟器(或设备上,但我从来没有运行设备单元测试)
  2. Xcode中注入测试目标为运行应用
  3. Xcode中调用所有测试
  4. Xcode中退出你的应用程序

这一切是必要的,关于可可触摸的之上运行单元测试 - 尤其是,任何涉及一个视图控制器加载其视图层次结构。

+0

感谢Jon的回复。不幸的是,这个技巧并没有真正帮助。它和以前一样是一个问题。不过,我发现了一个问题,如果你可以阅读这个问题的更新。 – Houman

+0

我会更加强调这一点:_never_ call'viewDidLoad'。调用运行时用于报告对象生命周期的方法不适合您。由运行时调用'viewDidLoad',因为视图_did_加载。 – matt

+0

感谢@matt,但即使'[viewController view]'也不能解决实际问题。请参阅更新的问题。 – Houman

相关问题