Проверка модульных утверждений в приложениях командной строки с помощью Click - PullRequest
0 голосов
/ 13 февраля 2020

Мне нужно выполнить модульное тестирование того, что утверждение поднято в функции командной строки.

click предоставляет функциональные возможности для тестирования приложений командной строки, а unittest предоставляет функциональные возможности для проверки того, что утверждения созданы. Моя проблема - объединение двух.

То, что я тестирую, похоже на код ниже. Существует функция с аргументом командной строки и опцией, которая должна быть указана, если этот аргумент имеет определенное значение. По духу это похоже на этот пример:

import unittest
import click
from click.testing import CliRunner

@click.command()
@click.argument('name')
@click.option('--age')
def hello(name, age):
    if name == 'Peter' and not age:
        raise ValueError('Please specify an age!')
    click.echo('Hello %s!' % name)


class TestClickAssertion(unittest.TestCase):
    def test_hello_world(self):
        with self.assertRaises(ValueError):
            runner = CliRunner()
            result = runner.invoke(hello, ['Peter'])
            print(result)

Проблема, с которой я столкнулся, заключается в том, что при работе с unittest в pycharm я получаю AssertionError: ValueError not raised, но команда print() печатает <Result ValueError('Please specify an age!',)>: что я хочу!

Как мне пройти этот тест?

1 Ответ

2 голосов
/ 13 февраля 2020

Как вы уже поняли, CliRunner не будет вызывать исключения, а будет возвращать их в объекте результата ( документация ).

Поэтому вместо использования assertRaises проверьте, что isinstance(result.exception, ValueError).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...