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

标签 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] failed: Could not load NIB in bundle: 'NSBundle (loaded)' with name 'FTStatsCellView'

有什么建议吗?谢谢

更新

如果我单击该项目并将测试目标 的目标从“无”更改为应用程序,那么它就可以工作了。

enter image description here

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

enter image description here

有什么建议吗?

最佳答案

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

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

所有这些对于在 Cocoa Touch 之上运行的单元测试都是必要的——特别是任何涉及加载其 View 层次结构的 View Controller 。

关于ios - 如何测试自定义单元格是否已在 tableView 中注册?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20936712/

相关文章:

iOS 和字节范围视频流不工作

java - Junit 最佳实践 : Public method calling multiple private methods

unit-testing - 为什么使用集成测试而不是单元测试是一个坏主意?

unit-testing - Groovy Spock阻止变量从未发布

Swift 3 表搜索

ios - dequeueReusableCellWithIdentifier 创建重复的 UITableviewcell

ios - 如何获取 didSelectRowAt IndexPath 以区分部分?

ios - Swift-从随机创建的文档ID(Firestore)中获取字段

iphone - 显示方向与设备方向不同的模态视图

IOS corebluetooth 后台模式通知