Swift Unit Test как установить с частным сеттером - PullRequest
0 голосов
/ 01 апреля 2019

Вот небольшой фон:

Я пытаюсь протестировать некоторые функции.Я не могу ничего изменить в функции или любых переменных класса.

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

Я спросил у кого-то, кто сказал мне, чтобы использовать расширение В тестовом файле для установки переменной, но я пытался, я не думаю, чтоЯ могу установить его, если расширение находится не в том же файле, что и функция.Я делаю что-то неправильно?Или есть другой способ проверить это?

1 Ответ

0 голосов
/ 01 апреля 2019

То, что они имели в виду, это поместить расширение в файл с тестируемым классом. Так что если у вас есть что-то вроде:

class ToBeTested {
    private(set) var bool: Bool
}

Вы можете добавить внутренний сеттер:

extension ToBeTested {
    func setBoolTrue() { bool = true }
}

Но это должно быть в одном файле с ToBeTested. Если вы не можете изменить этот файл, это не решаемая проблема. Если это нужно проверить таким образом, то класс должен быть спроектирован так, чтобы это разрешалось.

Когда свойство помечено private(set), компилятор может предположить, что значение не может быть изменено каким-либо образом за пределами этого файла. Это позволяет ему применять оптимизации, которые могут быть недопустимыми, если свойство можно изменить за пределами этого файла. «Метод установки» может даже не существовать, если компилятор определит, что он ему не нужен. Например, он может полностью включить эту операцию или полностью исключить ее, если сможет доказать, что значение никогда не изменяется.

...