Я пытаюсь проверить, вызывается ли метод ReloadData () экземпляром UITableView при обновлении его источника данных.
Я создал подкласс UITableView с именем MockTableView. Он имеет bool с именем reloadDataGotCalled, который устанавливается в значение true, когда вызывается переопределенная функция reloadData (). Затем я пытаюсь получить доступ к этому свойству из моего тестового класса, чтобы проверить, является ли оно истинным.
Однако, когда я пытаюсь это сделать, компилятор выдает мне сообщение, что «Значение типа« UITableView »не имеет члена» reloadDataGotCalled'"
Я не уверен, почему это происходит, потому что, насколько я вижу, я установил, что это значение имеет тип' MockTableView ', который должен иметь этот член?
// ViewController, который содержит выход tableView, который я хочу проверить.
class ItemListViewController: UIViewController {
let itemManager = ItemManager()
@IBOutlet var tableView: UITableView!
@IBOutlet var dataProvider: (UITableViewDataSource & UITableViewDelegate & ItemManagerSettable)!
@IBAction func addItem(_ sender: UIBarButtonItem) {
if let nextViewController = storyboard?.instantiateViewController(identifier: "InputViewController") as? InputViewController {
nextViewController.itemManager = itemManager
present(nextViewController, animated: true, completion: nil)
}
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = dataProvider
tableView.delegate = dataProvider
dataProvider.itemManager = itemManager
}
}
// Мой тестовый класс
class ItemListViewControllerTest: XCTestCase {
var sut: ItemListViewController!
override func setUp() {
//Given
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(identifier: "ItemListViewController")
sut = (viewController as! ItemListViewController)
//When
sut.loadViewIfNeeded()
}
// Тест, в котором я пытаюсь назначитьsut.tableView to mockTableView
func test_TableView_IsReloadedWhenItemAddedToItemManger() {
let mockTableView = MockTableView()
sut.tableView = mockTableView
let item = ToDoItem(title: "Foo")
sut.itemManager.add(item)
sut.beginAppearanceTransition(true, animated: true)
sut.endAppearanceTransition()
XCTAssertTrue(sut.tableView.reloadDataGotCalled) // <- this is where I'm getting the compiler message "Value of type 'UITableView' has no member 'reloadDataGotCalled'"
}
}
// Мой подкласс mockTableView в расширении ItemListViewControllerTests
extension ItemListViewControllerTest {
class MockTableView: UITableView {
var reloadDataGotCalled = false
override func reloadData() {
super.reloadData()
reloadDataGotCalled = true
}
}
}
Я ожидаю, что он должен скомпилироваться, а затем тест должен завершиться неудачей, потому чтоЯ еще не написал код, чтобы он прошел?