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

How do I unit test NSFetchedResultsControllerDelegate (controllerWillChangeContent and controllerDidChangeContent) using Swift

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

extension SomeListController: NSFetchedResultsControllerDelegate {



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

    tableView.beginUpdates()

}



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

    tableView.endUpdates()

}

}

我终于明白了。 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)

}