测试从情节提要板加载的UITableViewController子类时,除非我:A)向其发送viewWillAppear:YES或B),否则返回null; B)获取tableView.numberOfSections。
为什么是这样?为什么不访问视图或不在主线程上发送loadView选择器来完成这项工作?
SpecBegin(CustomerViewController)
describe(@"CustomerViewController", ^{
__block CustomerViewController *_vc;
beforeEach(^{
NSLog(@"Before Each");
UIStoryboard *mainstoryboard = [UIStoryboard storyboardWithName:@"Storyboard_Pad" bundle:nil];
_vc = (CustomerViewController *)[mainstoryboard instantiateViewControllerWithIdentifier:@"customer"];
});
it(@"the first cell should be the fullName cell", ^{
// Following line is needed to make the following tests pass.
[_vc viewWillAppear:YES];
UITableViewCell *cell = [_vc.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
expect(cell.reuseIdentifier).to.equal(@"fullName");
});
});
SpecEnd
最佳答案
您似乎正在对UI代码进行单元测试。我通常建议不要这样做,因为您将手动尝试模拟ViewController生命周期方法,以便接近重现UI在运行的应用程序中的行为。
我建议尝试两件事:
对模型/逻辑进行单元测试(例如,表视图正在使用的数据)。
如果必须测试UI,建议使用Xcode查看Automated Testing。