Задача 1:
Если вы определяете свою ячейку в кончике, вам нужно зарегистрировать этот кончик (вместо типа).
tableView.register(UINib(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "CustomTableViewCell")
Задача 2:
Кажется, прямой вызов controller.tableView!.cellForRow(at:)
может вернуть nil
. Но это не то, как UIKit называет вашу таблицу. Вместо этого вызывайте его через источник данных. Давайте попробуем сделать то же самое:
let actualCell = controller.tableView.dataSource?.tableView(controller.tableView, cellForRowAt: IndexPath(row: 0, section: 0))
Теперь это возвращает ячейку, и утверждение не выполняется, говоря, что два экземпляра CustomTableViewCell не равны.
Бонус: Если вы когда-нибудь захотите переместить источник данных в отдельный класс, вы можете сделать это без изменения теста. Тест не знает или не заботится о том, кто реализует источник данных.
Задача 3:
Изменение теста для установки "1"
в качестве текстовой метки ожидаемой ячейки по-прежнему не проходит. Это может быть потому, что каждая клетка имеет свой layer
. Поэтому вместо установки ожидаемой ячейки приведите фактическую ячейку к CustomTableViewCell. Затем вы можете проверить его свойства.
guard let cell = actualCell as? CustomTableViewCell else {
XCTFail("Expected \(CustomTableViewCell.self), but was \(actualCell)")
return
}
XCTAssertEqual(cell.textLabel?.text, "1")
Улучшение:
Просматривать источник данных табличного представления и передавать его табличное представление в качестве первого аргумента неудобно. Мы можем упростить чтение и запись тестов табличного представления, определив автономные вспомогательные функции.
func cellForRow(in tableView: UITableView, row: Int, section: Int = 0) -> UITableViewCell? {
return tableView.dataSource?.tableView(tableView, cellForRowAt: IndexPath(row: row, section: section))
}
Используя этот помощник, мы можем просто написать:
let actualCell = cellForRow(in: controller.tableView row: 0)
Необходимость пройти через источник данных (и вспомогательную функцию, чтобы сделать его проще) описана в моей книге Модульное тестирование iOS на примере: советы и методики XCTest с использованием Swift