Как я могу проверить с помощью doctest, что программа выдала определенный результат?

1

В одной из моих функций я вызываю внешнюю программу, используя subprocess.check_call, которая будет выводить результат. Как я мог использовать doctest, чтобы убедиться, что результат, который он производит, - это тот, который я ожидаю?

  • 0
    каков ожидаемый результат?
  • 0
    Например: «Обрабатывать файл ...», и он отображается каждый раз, когда обрабатывается новый файл. У меня есть фиксированный набор файлов, поэтому я знаю, сколько раз должно появиться сообщение.
Теги:
doctest

1 ответ

1
Лучший ответ

Возможно, это может помочь:

import sys
import tempfile
import subprocess


def example(output):
    r""" Do something ...

    >>> output = example('Processing file ...')
    >>> print output # doctest:+ELLIPSIS
    'Processing file ...'

    Check how many file was processed.
    >>> [line.startswith('Processing file')
    ... for line in output.splitlines()].count(True)
    1    

    """
    cmd = "print '%s'" % (output, )
    with tempfile.TemporaryFile() as output:
        subprocess.check_call([sys.executable, '-c', cmd], stdout=output)
        output.seek(0)
        res = output.read()

    return res

if __name__ == '__main__':
    import doctest
    doctest.testmod()

Как вы можете видеть, я использовал аргумент stdout функции subprocess.check_call, чтобы иметь возможность получить вывод команды, кроме того, если вы не используете аргумент stdout (который я предполагаю, что это ваш случай), мне очень сложно захватить вывод команды.

Надеюсь, это было надежно:)

  • 0
    Почему режим «r +», не должен ли он быть как минимум «w»?
  • 0
    @Geo: Это очень верно, на самом деле режим по умолчанию - 'w + b', поэтому нет необходимости указывать аргумент режима, когда я впервые читаю его, я читаю его 'wb'. Мое плохое исправлено спасибо. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню