如何使用Swift对NSFetchedResultsControllerDelegate(controllerWillChangeContent和controllerDidChangeContent)进行单元测试

时间:2016-12-17 19:52:22

标签: ios swift nsfetchedresultscontroller xctest

我有以下委托,我需要测试tableView.beginUpdates()被调用。我正在使用XCTest和Swift 3。 您有任何想法或示例代码吗?

extension SomeListController: NSFetchedResultsControllerDelegate {



func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {

    tableView.beginUpdates()

}



func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {

    tableView.endUpdates()

}

}

1 个答案:

答案 0 :(得分:0)

我最终确实弄明白了。 endsUpdates测试几乎是相同的模式。

func test_controllerWillChangeContent_beginsUpdates() {

    class MockTableView: UITableView {

        var gotCalled: Bool = false
        override func beginUpdates() {
            gotCalled = true
        }

    }

    let tableView: MockTableView = MockTableView()
    controller.tableView = tableView

    let _ = controller.view

    controller.controllerWillChangeContent(controller.fetchedResultsControler as! NSFetchedResultsController<NSFetchRequestResult>)

    XCTAssertTrue(tableView.gotCalled)

}