2015-02-26 2 views
0

У меня есть структура каталогов вроде этого:питон doctest из отдельного файла + место

|-root 
    |-app 
    program.py 
    tests.txt 
    |-tests 
    runTests.py 

Мой файл tests.txt содержит все doctests на моем program.py коде. Он называет

from program import * 

, а затем он вызывает все обращения к доктринам. Мой файл runTests.py имеет следующий код:

import doctest 
doctest.testfile("app/tests.txt") 

В командной строке я тогда называю:

python runTests.py 

и действительно найти файл tests.txt и читает его успешно, но это не делает найти модуль «программа», который я пытаюсь импортировать. Что я делаю не так? Как я могу использовать их в отдельных каталогах и все еще иметь возможность запускать тесты?

Благодаря

+0

Почему бы не сделать 'tests.txt' a * Python file *? – jonrsharpe

ответ

1

Там два способа сделать это:

  1. Вы можете добавить его sys.path в runTests.py: import sys; sys.path.append('app')
    То же самое может быть достигнуто с помощью переменной среды PYTHONPATH.

  2. Вы можете повернуть папку в пакет, добавив файл __init__.py и импортировав from app.program import * в tests.txt.

Напоминание: Основной предпосылкой doctest является то, что метод/функция документации (что вы получаете, когда вы смотрите на __doc__ собственности) объясняет, что он делает и дает примеры (тесты).

После этого Doctest находит такой код и выполняет его, убедившись, что примеры в документации фактически работают.

Если вы переместите тесты, то вы уберете главный источник информации от пользователя вашего кода. Я предполагаю, что это может иметь смысл, если у вас обширная документация за пределами исходного кода или если у вас много дополнительных тестов (вы хотите дать пользователям несколько примеров, а не все 500 модульных тестов, которые обеспечивают покрытие кода до 100%).

При этом, чтобы исправить проблему, вам необходимо сделать импортную работу. Папка app не волшебным образом появляется в пути поиска для модулей. Вы должны сказать Python, что на самом деле это место, где он должен выглядеть.

+0

Возможно, это не код python, просто текст с инструкциями по тестированию вкраплен. –

+0

Привет, Аарон, спасибо за подробный ответ. Я думал, что учение отдельно является хорошим дизайном для более крупных программ. Вот руководство по python: https://docs.python.org/2/library/doctest.html#simple-usage-checking-examples-in-a-text-file Возможно, вы, вероятно, прав насчет файла .txt, но это не действительно код, это материал для доктрины. Опять же, ссылка выше также использует файл example.txt для запуска тестов – user3578788

+0

@ user3578788: Hm. Я стою исправлено :-) Я переформулировал свой ответ соответственно. –