2013-08-09 3 views
2

Я настраиваю структуру каталогов для своего приложения Django для разделения функциональных и модульных тестов. Я использую нос в качестве тестового бегуна для моего проекта Django.python - Nose не обнаруживает тесты уровня пакета в Django

В корневом каталоге проекта Django, У меня есть папка под названием «тестами», что имеет такую ​​структуру:

tests 
├── __init__.py 
├── functional 
│ ├── __init__.py 
└── unit 
    ├── __init__.py 
    ├── data.py 
    ├── tests.py 

Если я хочу запустить только модульные тесты, я не должен быть в состоянии использовать следующие из корня проекта:

$ nosetests tests.unit 

---------------------------------------------------------------------- 
Ran 0 tests in 0.000s 

OK 

Как вы можете видеть, это не находит тесты в файле tests.py.

Однако, когда я бегу, используя структуру каталогов, тесты можно найти, как они должны быть:

$ nosetests tests/unit/ 
E 
# .. Some errors I expected because settings are not initialized when called this way 
----------------- 
Ran 1 test in 0.001s 

FAILED (errors=1) 

Что мне не хватает? Моя основная проблема заключается в том, что у меня есть функция setup в tests.unit.__init__.py, которая должна быть вызвана для создания данных в тестовой БД для предстоящих тестов.

Благодаря

+0

Возможно, вам нужно включить блок импорта в первый __init__? (просто бросая это там) – sihrc

+0

@sihrc так не думает, так как я могу импортировать модуль unit.tests из того же каталога, используя командную строку python 'python -c 'import tests.unit'' – user1496984

+1

вы пытаетесь запустить нос в подробном режиме? попробуйте использовать '-v' и' -vv', чтобы узнать, дают ли они какой-либо намек на обнаружение теста. – Bakuriu

ответ

2

Это все зависит от того, какой код в tests/unit/__init__.py

Когда вы говорите

nosetests tests.unit 

Вы указывая на unit/__init__.py не каталог unit/, таким образом, если у вас не было никаких испытаний в ваш модуль __init__.py, тогда ничего не будет запущено. Поэтому понятно, что вы использовали путь к каталогу, а затем ваши тесты начали работать.

Вы упоминаете

Что я упускаю? Моя основная проблема заключается в том, что у меня есть функция настройки в tests.unit. init .py, который должен быть вызван для создания данных в тестовой БД для предстоящих тестов.

Вполне вероятно, что, хотя у вас есть функция установки в __init__.py вы, возможно, никогда не были импортированы функции тестирования в __init__.py

Один быстро исправить, чтобы это можно было бы добавить эту строку в __init__.py

from tests.unit.tests import * 

Было сказано, что действительно не очень удобно вводить код __init__.py, и если у вас есть код, который возвращает какие-то данные конфигурации, я бы рекомендовал создать новый библиотечный модуль с functi которые возвратят данные конфигурации в ваши тесты

+0

Спасибо за ответ!Мое понимание функции обнаружения носа заключается в том, что он хотел бы, чтобы все модули соответствовали шаблону. Поэтому, когда я укажу его на test.unit, он найдет test.py и все тестовые функции внутри. Но теперь я добавил 'from .tests import *', который, кажется, делает трюк. Невозможно позволить носу найти тесты автоматически, вместо того, чтобы импортировать их вручную? – user1496984

+0

Да, просто сделайте 'nosetests unit /', если вы хотите, чтобы все тесты были найдены автоматически в каталоге. Как я уже говорил, когда вы говорите «nosetests tests.unit», вы говорите носу, чтобы найти все тесты в определенном модуле. Если у этого модуля нет тестов, то тогда вам не повезло. Я не использую много модульных обозначений, хотя я не могу говорить более подробно. Возможно, посмотрите на исходный код https://github.com/nose-devs/nose, чтобы узнать больше – Greg

Смежные вопросы