Тестируем Python. 12 лабораторных работ с pytest

- -
- 100%
- +
2. Любое целое вне диапазона вызывает исключение ровно класса ValueError, а не произвольного Exception и не подкласса.
3. Любой другой тип, включая bool, float, str и None, вызывает исключение ровно класса TypeError. Преобразования типов нет.
4. У функции нет внешних эффектов. Содержание сообщения исключения можно менять: контракт закрепляет тип, не текст.
Как выбрать проверкиОтказ имеет смысл лишь относительно допустимого входа. Число 0 — подходящий тип, но запрещённое значение; строка '12' — неподходящий тип, хотя человек мог бы прочитать её как число. Мы намеренно не делаем функцию парсером пользовательского текста. Такое разделение позволяет вызывающему коду различать две категории ошибок и избавляет тесты от догадок о неоговорённых преобразованиях.
Сначала фиксируем положительную часть: 1, 12 и 50 возвращаются без изменения. Проверки нижней и верхней допустимых границ нужны и здесь. Иначе реализация, которая бросает исключение для любого аргумента, могла бы удовлетворить только отрицательным примерам. Положительная и отрицательная части вместе описывают не просто способность падать, а правило принятия входа.
Для 0 и 51 используем with pytest.raises(ValueError). Внутри блока оставляем единственное действие — вызов проверяемой функции. Если она вернётся без исключения, тест не пройдёт; если выбросит Exception другого подходящего только по общему предку класса, это тоже будет падением. Подготовку данных и последующие утверждения держим снаружи, чтобы они не выдали свою ошибку за ожидаемый отказ проверяемого вызова.
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.



