Используйте Sphinx doctest с: Пример: - PullRequest
2 голосов
/ 01 октября 2019

Рассмотрим следующую функцию:

# in mymodule.py:

def myfunc(num,mystring):
    """
    replicates a string

    :param num: a positive integer
    :param mystring: a string
    :return: string concatenated with itself num times

    :Example:
        >>> num = 3
        >>> mystring = "lol"
        >>> myfunc(num, mystring)
            "lollollol"
    """
    return num*mystring

Как мне заставить Sphinx doctest работать, чтобы проверить пример кода в

:Example:´ actually does work? Whenever I run make doctest`

это говорит о том, что 3 теста были выполнены, но 1 не пройден. Удаление двух последних строк, начиная с

myfunc(num, mystring),

, говорит о том, что 2 теста были выполнены успешно. Поэтому я, должно быть, что-то не так делаю с этой строкойНо что?

РЕДАКТИРОВАТЬ Вот вывод терминала (traceback) для полного кода;кажется, что каким-то образом он не может найти функцию, для которой я написал строку документации, и я запускаю тест документации:

Running Sphinx v1.8.3
loading pickled environment... done
building [mo]: targets for 0 po files that are out of date
building [doctest]: targets for 1 source files that are out of date
updating environment: [] 0 added, 1 changed, 0 removed
reading sources... [100%] index                                                 
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
running tests...

Document: index
---------------
**********************************************************************
File "index.rst", line ?, in default
Failed example:
    myfunc(num, mystring)
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib/python3.6/doctest.py", line 1330, in __run
        compileflags, 1), test.globs)
      File "<doctest default[2]>", line 1, in <module>
        myfunc(num, mystring)
    NameError: name 'myfunc' is not defined
**********************************************************************
1 items had failures:
   1 of   3 in default
3 tests in 1 items.
2 passed and 1 failed.
***Test Failed*** 1 failures.

Doctest summary
===============
    3 tests
    1 failure in tests
    0 failures in setup code
    0 failures in cleanup code
build finished with problems.
Makefile:19: recipe for target 'doctest' failed

Ответы [ 2 ]

2 голосов
/ 02 октября 2019

Sphinx + doctest не импортирует модуль. Вы можете помочь ему в строке документации:

    :Example:
        >>> from mymodule import myfunc
        >>> myfunc(3, 'lol')
        'lollollol'

или добавить это в conf.py:

doctest_global_setup = '''
#if required, modif sys.path:
import sys
sys.path.append('../directory_containing_mymodule/')
from mymodule import *
'''

ср. https://www.sphinx -doc.org / ru / master / use / extensions / doctest.html

Мне будет интересно узнать, есть ли более простые ответы.

1 голос
/ 01 октября 2019

На моем терминале и за пределами Сфинкса мне нужно выровнять "lollollol" по левому краю и использовать простые кавычки, чтобы успешно запустить doctest:

    :Example:
        >>> num = 3
        >>> mystring = "lol"
        >>> myfunc(num, mystring)
        'lollollol'
...