Я использую Kiwi для написания тестов для приложения. Я пытаюсь проверить, что ячейка, возвращаемая с tableView:cellForRowAtIndexPath:
, имеет правильные значения, установленные после вызова. Я сделал УНЧ различных вариаций этого не повезло:Kiwi BDD - Как проверить результаты `tableView: cellForRowAtIndexPath:`? (Objective-C)
describe(@"tableView:cellForRowAtIndexPath:", ^{
it(@"Should return a cell with proper label values",
^{
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
id mockTableView = [UITableView mock];
id mockCell = [UITableViewCell mock];
[mockTableView stub:@selector(dequeueReusableCellWithIdentifier:forIndexPath:) andReturn:mockCell withArguments:any(), indexPath];
[mockCell stub:@selector(label1)
andReturn:[[UILabel alloc] init]];
[mockCell stub:@selector(label2)
andReturn:[UILabel alloc]];
CustomTableViewCell *cell = (CustomTableViewCell *)
[dataSource tableView:mockTableView
cellForRowAtIndexPath:indexPath];
[[cell.label1.text should]
equal:@"abc"];
[[cell.label2.text should] equal:@"xyz"];
});
});
Фактический метод выглядит следующим образом:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomTableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:kCustomCellReuseIdentifier
forIndexPath:indexPath];
CustomObject *obj = [self objAtIndexPath:indexPath];
[self setupCell:cell withObj:obj];
return cell;
}
- (void)setupCell:(
CustomTableViewCell *)cell withObj:(CustomObject *)obj
{
cell.label1.text = @"abc";
cell.label2.text = @"xyz";
}
кажется попасться на cell.label1
быть nil
- однако, я оставьте это раньше.
Любые мысли о том, как на самом деле написать этот тест, приветствуются.
'cell.label1' nil внутри' setupCell: 'или в модульном тесте? – Cristik
В setupCell я вижу, что это nil –
Вы должны попробовать насмешку 'CustomTableViewCell' вместо' UITableViewCell', так как 'UITableViewCell' не имеет селектора' label1', и поэтому вызов 'stub' может ничего не делать. Также вы выполняете stubbing как возвращаемое значение a [[[UILabel alloc] init] ', что означает, что при создании« метки »создается другая метка. – Cristik