Слип слишком умный? Проверка типа объекта при тестировании с помощью 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()

Конечно, он будет держать ваши тесты от компиляции вместо сбоев, когда они будут запущены. Но он сообщает то же самое: "Что-то в этом тесте уже не так, как ожидалось!"