如何测试自定义单元格是否已在tableView中注册?

时间:2014-01-05 17:26:28

标签: ios unit-testing uitableview ios7

如果自定义单元格已在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的目标从None更改为应用程序,那么它可以正常工作。

enter image description here

但这会产生副作用,即每次我想要运行单元测试时应用程序都会在模拟器中运行。

enter image description here

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

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

  1. Xcode在模拟器中(或在设备上启动您的应用程序,但我从不在设备上运行单元测试)
  2. Xcode将测试目标注入正在运行的应用程序
  3. Xcode调用所有测试
  4. Xcode退出您的应用
  5. 对于在Cocoa Touch上运行的单元测试,所有这些都是必需的 - 特别是涉及视图控制器加载其视图层次结构的任何内容。