0

我不确定如何实现我的模拟UITableView对象正确回答indexPathsForSelectedRows. 在我的应用程序中,用户可以(处于编辑状态)选择表格视图中的单元格,该单元格代表给定目录的文件/文件夹。一旦用户选择了一个文件夹项目,之前选择的文件项目应该被取消选择。我的测试(使用 OCHamcrest/OCMockito)看起来像这样。

- (void)test_tableViewwillSelectRowAtIndexPath_DeselectsPreviouslySelectedCells
{
    // given
    [given(self.mockTableView.editing) willReturnBool:YES];

    // when
    [self.sut tableView:self.mockTableView willSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:SectionIdFile]];
    [self.sut tableView:self.mockTableView willSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:SectionIdFolder]];

    // then
}

问题是我可以验证文件项是否被选中,但我不能向 mockTableView 询问其选定的行。有人可以告诉我如何处理吗?tableView:selectRowAtIndexPath:animated:scrollPosition:当 tableView 被要求提供该信息时,我是否必须自己记录电话并提供正确答案?

4

1 回答 1

0

由于 mockTableView 无法记录(如真实的UITableView)所选单元格的 indexPath,您必须确保 mock 对象返回该方法的正确答案。所以在我的情况下,测试现在看起来像这样。

- (void)test_tableViewwillSelectRowAtIndexPath_DeselectsPreviouslySelectedCellsForSectionIdFile
{
    // given
    [given(self.mockTableView.editing) willReturnBool:YES];

    NSArray *selectedRows = @[[NSIndexPath indexPathForRow:0 inSection:SectionIdFile], [NSIndexPath indexPathForRow:1 inSection:SectionIdFile]];
    [given([self.mockTableView indexPathsForSelectedRows]) willReturn:selectedRows];

    // when
    [self.sut tableView:self.sut.myTableView willSelectRowAtIndexPath:selectedRows[0]];
    [self.sut tableView:self.sut.myTableView willSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:SectionIdFolder]];

    // then
    [verify(self.mockTableView) deselectRowAtIndexPath:selectedRows[0] animated:YES];
    [verify(self.mockTableView) deselectRowAtIndexPath:selectedRows[1] animated:YES];
}
于 2013-06-18T07:58:53.523 回答