От this great answer Я научился анализировать парсы в своей собственной функции, чтобы упростить модульное тестирование.Как я могу проверить, бросает ли мой код соответствующие исключения argparse?
От this answer Я узнал, что иногда вам нужно выбросить собственные ошибки парсера, чтобы получить argparse для выполнения вашего поведения. Например .:
if not (args.process or args.upload):
parser.error('No action requested, add -process or -upload')
Но это трудно проверить, если это то, что он должен, так как метания ошибка синтаксического анализа и выходит из программы. Так что-то вроде этого TestCase не будет работать:
def test_no_action_error(self):
'''Test if no action produces correct error'''
with self.assertRaises(ArgumentError) as cm:
args = parse_args(' ')
self.assertEqual('No action requested, add -process or -upload', str(cm.exception))
Комментарии от первого вопроса предполагают this question. Но я не понимаю, как использовать этот код в файле тестирования.
Я не уверен, что понял вопрос. Что не так с ловушкой 'SystemExit'? – wim
@wim ничего плохого в этом, я просто не мог найти здесь вопрос о SO, который сказал, что это (и как) – raphael