Запустите все мои doctests для всех модулей Python в папке без сбоев из-за плохого импорта - PullRequest
7 голосов
/ 06 сентября 2010

Я начал интегрировать doctests в мои модули.(Ура!) Это, как правило, файлы, которые начинались как скрипты, и теперь представляют собой несколько функций с приложениями CLI в __name__=='__main__', поэтому я не хочу помещать запуск тестов там.Я пробовал nosetests --with-doctest, но получаю много сбоев, которые не хочу видеть, потому что во время обнаружения тестов это модули импорта, которые не содержат тестов, но требуют импорта вещей, которые я не установил в этой системе, или должен бытьработать в специальных установках Python.Есть ли способ, которым я могу запустить только все мои doctests?

Я рассмотрел горячую клавишу в vim для запуска «import doctest; doctest.testfile (currentFilename)» для запуска моих doctests в текущем модуле, идругой скрипт, который запускает все тесты - что делают другие пользователи doctest?Или я должен использовать что-то кроме doctest?

Ответы [ 2 ]

6 голосов
/ 26 июля 2013

Вы также можете создавать юнит-тесты, которые обертывают нужные модули для док-тестов, это навигационная особенность док-тестов: http://docs.python.org/2/library/doctest.html#unittest-api.

import unittest
import doctest 
import my_module_with_doctests

def load_tests(loader, tests, ignore):
    tests.addTests(doctest.DocTestSuite(my_module_with_doctests))
    return tests
3 голосов
/ 06 сентября 2010

Я думаю нос - это путь.Вам следует либо исключить проблемные модули явным образом с помощью -e, либо перехватить отсутствующий импорт в вашем коде с помощью таких конструкций:

try:
    import simplejson as json
except ImportError:
    import json

Обновление:

Другой вариантзаключается в том, чтобы обеспечить фиктивные замены для отсутствующих модулей.Допустим, ваш код имеет что-то вроде этого:

import myfunkymodule

, и вы пытаетесь запустить свои тесты в системе, где отсутствует myfunkymodule.Вы можете создать файл mock_modules/myfunkymodule.py с имитационными реализациями необходимого вам материала (возможно, с помощью MiniMock , который я настоятельно рекомендую, если вы используете doctest ).Затем вы можете запустить nose так:

$ PYTHONPATH=path_to/mock_modules nosetests --with-doctest
...