Можно ли для модульного теста утверждать, что метод вызывает sys.выход()
У меня есть метод python 2.7, который иногда вызывает
sys.exit(1)
можно ли сделать модульный тест, который проверяет этот код вызывается, когда все условия выполнены?
4 ответа:
да.
sys.exit
поднимаетSystemExit
, Так что вы можете проверить его сassertRaises
:with self.assertRaises(SystemExit): your_method()
экземпляров
SystemExit
атрибутcode
который установлен в предлагаемое состояние выхода, а менеджер контекста возвращаетсяassertRaises
имеет пойманный экземпляр исключения какexception
, так что проверка состояния выхода легко:with self.assertRaises(SystemExit) as cm: your_method() self.assertEqual(cm.exception.code, 1)
выход из Python. Это реализовано путем поднятия
SystemExit
исключения ... можно перехватить попытку выхода на внешнем уровне.
вот полный рабочий пример. Несмотря на отличный ответ Павла мне потребовалось некоторое время, чтобы понять это, поэтому я это здесь в надежде, что это будет полезно.
import unittest from glf.logtype.grinder.mapping_reader import MapReader INCOMPLETE_MAPPING_FILE="test/data/incomplete.http.mapping" class TestMapReader(unittest.TestCase): def test_get_tx_names_incomplete_mapping_file(self): map_reader = MapReader() with self.assertRaises(SystemExit) as cm: tx_names = map_reader.get_tx_names(INCOMPLETE_MAPPING_FILE) self.assertEqual(cm.exception.code, 1)
в качестве дополнительного примечания к отличному ответу Павла вы также можете проверить конкретные статусы, если они предусмотрены в функции, которую вы тестируете. Например, если
your_method()
содержал следующееsys.exit("Error")
можно было бы проверить на "ошибку" конкретно:with self.assertRaises(SystemExit) as cm: your_method() self.assertEqual(cm.exception, "Error")
Я нашел ответ на ваш вопрос в документация по модульному тестированию Python поиск "тестирование на исключения". Используя Ваш пример, модульный тест будет выглядеть следующим образом:
self.assertRaises(SystemExit, your_function, argument 1, argument 2)
Не забудьте включить все аргументы, необходимые для проверки функции.