Можно ли запустить doctest python для функции ячейки jupyter?

Кажется, есть пакет для включения этой функции, но мне не повезло с ним в python 3.5.2 или 2.7.12:

from ipython_doctester import test

@test
def my_fun():
    '''
    >>> 2 + 3
    6
    '''
    pass

TypeError: data must be a dict, got: 'ipython_doctester'

Можно ли запустить doctest из ячейки jupyter с помощью этого пакета или каким-либо другим способом?

Я также просмотрел %doctest_mode и увидел, что он включает и выключает режим Doctest, но не смог запустить фактический doctest из ячейки.


person Rich L    schedule 19.10.2016    source источник


Ответы (4)


Попробуйте это на ноутбуке Jupyter:

def my_fun():
    '''
    >>> 2 + 3
    6
    '''
    pass

import doctest
doctest.testmod()

Результат должен быть:

**********************************************************************
File "__main__", line 3, in __main__.my_fun
Failed example:
    2 + 3
Expected:
    6
Got:
    5
**********************************************************************
1 items had failures:
   1 of   1 in __main__.my_fun
***Test Failed*** 1 failures.
TestResults(failed=1, attempted=3)

(я использовал питон 2.7.12)

person swatchai    schedule 25.10.2016

Я продолжаю заходить на эту страницу, но хотел запустить тест для одной функции. В этом случае поможет ответ на https://stackoverflow.com/a/10081450/741316. А именно:

def my_fun():
    '''
    >>> 2 + 3
    6
    '''
    pass

import doctest
doctest.run_docstring_examples(my_fun, globals())
person pelson    schedule 01.12.2017

Я использовал ответ @pelson, чтобы написать этот декоратор

import doctest
import copy
import functools
def test(func):
    globs = copy.copy(globals())
    globs.update({func.__name__:func})
    doctest.run_docstring_examples(func, globs, verbose=True, name=func.__name__)
    return func

См. суть с doctest: https://gist.github.com/2torus/f78b7cef5770927a92e3ca652f38ff89

person Torus    schedule 04.04.2018
comment
Это очень умно, и мне это нравится. Но всегда кажется, что проверяется предыдущая версия ячейки, а не версия, которая сейчас выполняется...? - person Ezra; 22.09.2020
comment
@ Эзра, возможно, ты прав, реализация довольно сложная. Но я попытался воспроизвести в Google Colab простой пример, и он отлично сработал в colab. research.google.com/drive/. У вас есть воспроизводящий пример, чтобы поделиться? Оставьте комментарий в Github gist. - person Torus; 24.09.2020

Вы можете использовать nbqa для запуска тестов в блокнотах:

$ nbqa doctest my_notebook.ipynb
**********************************************************************
File "my_notebook.ipynb", cell_2:11, in my_notebook.add
Failed example:
    add(2, 2)
Expected:
    4
Got:
    5
**********************************************************************
1 items had failures:
1 of   2 in my_notebook.hello
***Test Failed*** 1 failures.
person ignoring_gravity    schedule 28.10.2020