почему doctest не работал в qpython3

Я пытаюсь использовать doctest в qpython. Но скрипт не работал, что нормально в среде ПК.

Это всего две строки, отличающиеся от моего скрипта в среде ПК: import sl4a droid = sl4a.Android()

После запуска скрипта в qpython я вижу журнал docctest, но тестовый пример, похоже, не тестировался. Я получил следующее сообщение: 11 элементов не имели тестов: ... 0 тестов в 11 элементах. 0 сдано и 0 не выполнено. Тест пройден

Есть ли какие-то важные вещи, которые я пропустил? Спасибо за вашу помощь!


person Roger Ding    schedule 05.03.2017    source источник


Ответы (2)


Это потому, что qpython запускает python с оптимизацией (-OO), которая удаляет строки документации, поэтому doctest ничего не видит. Следующий трюк возвращает вам почти все функциональные возможности. По сути, он просто анализирует исходный файл с помощью модуля ast, чтобы получить строки документации и поместить их в словарь __test__.

def setupDoctest():
    global __test__
    import ast
    __test__ = {}
    parsed = ast.parse(open(__file__).read(), "doctest")
    doctypes = ast.Module, ast.FunctionDef, ast.ClassDef
    for node in ast.walk(parsed):
        if isinstance(node, doctypes):
            d = ast.get_docstring(node, True)
            if d:
                __test__[getattr(node, "name", "module")] = d

Просто вызовите это перед вызовом doctest.testmod, и он запустит строки документации.

person Jurjen    schedule 26.07.2018

Возможно, вы нашли решение, но на днях у меня был аналогичный опыт с QPython. Кажется, вы не можете (пока) использовать Player или Pyjnius в консоли с QPython. Запуск скрипта как приложения Kivy позволяет импортировать Plyer или Pyjnius. Попробуйте добавить следующие строки:

#-*-coding:utf8;-*-
#qpy:2
#qpy:kivy
person Usman Ali    schedule 29.07.2018