Python: использование doctests для классов

Действительно ли возможно использовать doctest понятие Python для классов, не просто функционирует?

Если так, куда я помещу doctests - в docstring класса, или в docstring конструктора?

Для разъяснения я ищу что-то как:

class Test:
    """
    >>> a=Test(5)
    >>> a.multiply_by_2()
    10
    """
    def __init__(self, number):
        self._number=number

    def multiply_by_2(self):
        return self._number*2

Заранее спасибо,

Adam

40
задан Adam Matan 25 April 2010 в 12:31
поделиться

2 ответа

Вам не хватает кода для фактического запуска тестов в нижней части файла:

class Test:
    <snip>

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

Что касается того, где разместить тесты:

  • Если он тестирует класс в целом, я бы поместил их в строку документации класса.
  • Если он тестирует конструктор, я бы поместил их в строку документации конструктора.
  • Если он тестирует метод (как кажется в данном случае), я бы фактически поместил его в строку документации этого метода.
29
ответ дан 27 November 2019 в 01:20
поделиться

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

Что касается того, что лучше поместить тестовые документы в строку документации класса или в конструктор, я думаю, это зависит от того, что именно вы документируете.

Если строка документации дает общий обзор класса и того, как его использовать, я думаю, что лучше поместить ее в класс.

Если в строке документации указано, как создавать экземпляры класса, ее следует поместить в метод __ init __ .

Помните, что целью doctests является, прежде всего, наличие в документации примеров кода с самопроверкой, поэтому, IMHO, аспект документации должен иметь приоритет над аспектом тестирования.

Изменить:

В вашем примере выше нет кода для выполнения doctest - запуск python test.py -v выполнит основной код Python, который просто определяет класс.

Вам нужно добавить это в конец файла:

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

В качестве альтернативы, если вы используете Python 2.6 или новее, запустите его с:

python -m doctest -v test.py
7
ответ дан 27 November 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: