Тестирование приложения командной строки Docopt в Unittest?

Кто-нибудь может показать мне, как я могу протестировать приложение cli, написанное на Docopt (Python)? Кто-то на GitHub опубликовал это,

import unittest
from docopt import docopt
import your.entry.point.of.sum as sum

# you can import the doc string from the sum module
doc = sum.__doc__

# suppose now the doc is:
#     Sum two numbers.
#     Usage: summation.py <x> <y>

# then write your test cases
class TestCLIParser(unittest.TestCase):
    def test_sum(self):
        args = docopt(doc, ["1", "3"])
        self.assertEqual(args["<x>"], "1")
        self.assertEqual(args["<y>"], "3")

   def and_so_on(self):
        ...

У меня есть это, но может ли кто-нибудь показать мне, как я могу проверить вывод программы? В этом примере проверяются только аргументы


person Delete Me    schedule 23.06.2014    source источник
comment
поэтому вы хотите захватить стандартный вывод, как в этом вопросе stackoverflow.com/questions/4219717/?   -  person J. P. Petersen    schedule 25.06.2014


Ответы (1)


class TestCLI(unittest.TestCase):
    def test_sum(self):
        cmd = shlex.split("sum 1 3")
        output = subprocess.check_output(cmd)
        self.assertEqual(output, "4")

Хотя вы можете использовать модуль unittest для такого рода тестирования, это не совсем модульное тестирование. Простая программа суммирования имеет простой вывод, который легко зафиксировать в таком коде. Но по мере того, как ваша программа превращается во что-то более сложное, становится все труднее поддерживать ожидания в исходном коде. Для такого рода тестирования я бы рекомендовал ApprovalTests.

person ian.buchanan    schedule 27.01.2016