Слип слишком умный? Проверка типа объекта при тестировании с помощью XCTest
Я знаю, что есть ряд вопросов о том, как получить тип объекта с помощью Swift.
Например: Как узнать тип объекта (в Swift)?
Причина, по которой я хочу найти тип, заключается в том, что я могу проверить, что верная вещь возвращается в unit test. Предпосылка, если кто-либо ее изменит, тест не удастся, и мы будем знать, что будем более осторожны.
Swift имеет метод is
, который возвращает логическое значение относительно того, является ли объект определенного типа. Я бы хотел использовать is, а затем утверждать, что ответ верен.
Как указано здесь (http://www.raywenderlich.com/74138/swift-language-faq), однако и показано на практике.. это вызывает ошибку:
Ошибка: всегда есть тест
Дело в том, что теперь он возвращает true. И я пишу тест, так что это всегда так. Глупый быстрый.
Любые идеи, как я могу проверить тип ответа с помощью XCTest и быстрого?
Спасибо
Ответы
Ответ 1
Чтобы заставить Swift быть слишком умным, наберите объект, который вы тестируете, введите Any
, а затем проверьте его. Например, если вы хотите утверждать, что функция fred()
возвращает Int
func fred() -> Int {
return 3
}
assert((fred() as Any) is Int)
Попробуйте это на игровой площадке, а затем измените тип возвращаемого значения на Float
, и команда assert будет срабатывать.
Ответ 2
Если вы явно указываете типы в своих объявлениях let, возможно, вам не нужно делать что-то более сложное?
let fred: Int = fred()
Конечно, он будет держать ваши тесты от компиляции вместо сбоев, когда они будут запущены. Но он сообщает то же самое: "Что-то в этом тесте уже не так, как ожидалось!"