У меня есть метод python 2.7, который иногда вызывает
sys.exit(1)
Можно ли сделать модульный тест, который проверяет, что эта строка кода вызывается при соблюдении правильных условий?
python
unit-testing
Медведь Трэвис
источник
источник
Ответы:
Да.
sys.exit
рейзитSystemExit
, так что вы можете проверить это с помощьюassertRaises
:Экземпляры
SystemExit
имеют атрибут, дляcode
которого установлен предлагаемый статус выхода, а диспетчер контекста, возвращаемый с помощью,assertRaises
имеет экземпляр пойманного исключения asexception
, поэтому проверить статус выхода легко:sys.exit Документация :
источник
sys.exit(1)
(в отличие от, скажем,sys.exit(0)
), вам нужно фактически подтвердить, что онcode
равен 1. Я думаю, вы могли бы сделать это с помощьюassertRaisesRegexp(SystemExit, '1')
?unittest
метод, который позволяет передавать исключение и вызываемый предикат для выполнения для исключения или его аргументов, а не просто шаблон регулярного выражения для выполнения в строковом представлении его первого аргумента… но я думаю, что нет. Я думаю о каком-нибудь другом тестовом модуле?self.assertRaisesRegex( SystemExit, '^2$', testMethod )
меньше кода, достаточно читабельна.self.assertRaisesRegexp
Вот полный рабочий пример. Несмотря на отличный ответ Павла, мне потребовалось время, чтобы понять это, поэтому я включаю его здесь в надежде, что он будет полезен.
источник
Я нашел ответ на ваш вопрос в поисковой документации по модульному тестированию Python «Тестирование на исключения». Используя ваш пример, модульный тест будет выглядеть следующим образом:
Не забудьте включить все аргументы, необходимые для проверки вашей функции.
источник
В качестве дополнительного примечания к отличному ответу Павла вы также можете проверить конкретные статусы, если они предусмотрены в функции, которую вы тестируете. Например, если он
your_method()
содержит следующее,sys.exit("Error")
можно будет конкретно проверить "Ошибка":источник