Тестирование частных @IBOutlets и @IBActions

Мы можем сделать @IBOutlets и @IBAction приватными. Пример:

class MyViewController: UIViewController {

    @IBOutlet private weak var myLabel: UILabel!

    @IBAction private func nextTapped(sender: UIButton) {
        // Do something
    }

}

У нас нет доступа к этим свойствам и методам вне класса, и это хорошо.

Но как насчет тестирования класса с частными розетками и действиями? Есть ли способы протестировать частную розетку или метод в XCTestCase, или мне нужно просто выставить их вне класса, сделав внутренним?

Для целей теста @IBOutlets / @IBActions должны быть внутренне видимыми?


person Daniel Sumara    schedule 05.10.2016    source источник
comment
Возможный дубликат Swift - частные переменные и методы модульного тестирования   -  person Fantattitude    schedule 05.10.2016


Ответы (2)



Частные методы также ДОЛЖНЫ быть протестированы, но суть не в том, чтобы что-либо изменить в тестируемом классе для запуска тестов.

По умолчанию вы можете получить доступ к IBOutlets из модульных тестов, но в случае, если вы установили их как частные, вы всегда можете создать новый MockSubclass вашего тестируемого класса, а затем раскрыть частные данные.

Во время теста просто создайте экземпляр своего фиктивного подкласса и вызовите функцию, которая возвращает вашу частную розетку.

Берегись! держите ваши макетные классы всегда под тестовой целью.

person Javier Calatrava Llavería    schedule 05.02.2017
comment
Не могли бы вы привести пример с IBAction и IBOutlet? - person Tomasz Nazarenko; 23.03.2017