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

Ios 如何测试自定义单元格是否已在tableView中注册?,ios,unit-testing,uitableview,ios7,Ios,Unit Testing,Uitableview,Ios7,我想进行单元测试,看看自定义单元格是否已注册到tableView -(void)viewDidLoad { [super viewDidLoad]; UINib *nib = [UINib nibWithNibName:@"FTStatsCellView" bundle:nil]; [[self tableView] registerNib:nib forCellReuseIdentifier:@"FTStatsCellView"]; } 单元测试: -(void)te

我想进行单元测试,看看自定义单元格是否已注册到
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.");
}
测试失败,并显示以下消息:

[FTSTATSVIEWCONTROLLESTERS TESTIFCUSTOMCELLERS可注册] 失败:无法加载捆绑包中的NIB:“NSBundle” (已加载)名称为“FTStatsCellView”的

有什么建议吗?谢谢

更新

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

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


有什么建议吗?

设置目标为测试目标指定捆绑加载程序和测试主机。在运行单元测试时,这对于以下顺序是必要的:

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

  • 所有这些对于在Cocoa Touch上运行的单元测试都是必要的,尤其是,任何涉及视图控制器加载其视图层次结构的内容。

    您是否已将nib包括在测试目标中?我似乎遇到了与此处类似的问题:但不知道如何将path与
    nibWithNibName
    结合起来。顺便说一句,已经检查了xib文件的测试目标成员资格。它包含在测试目标的
    复制包资源中。我被卡住了…但是如果你想执行这种测试,应用程序必须在模拟器中运行,因为这种测试需要应用程序运行。这是一个关于应用程序运行时所做操作的测试。这有什么不对吗?不要担心,要高兴。不要在测试目标中包含生产NIB。正如我在更新的答案中所解释的,测试需要注入到正在运行的应用程序中…我建议您更新问题标题。谢谢Jon的回复。不幸的是,这个把戏并没有真正起作用。这和以前的问题一样。然而,我发现,如果你能阅读问题的更新,请。我会更强烈地说:永远不要调用
    viewdiload
    。您不能调用运行时用于报告对象生命周期中某个阶段的方法。由运行时调用
    viewDidLoad
    ,因为视图确实加载了。谢谢@matt,但即使
    [viewController view]
    也不能解决实际问题。请参阅更新的问题。