Как использовать тесты носа с каталогом верхнего уровня в качестве пакета? - PullRequest
0 голосов
/ 22 февраля 2020

Этот вопрос показывает простой проект:

./__init__.py
./foo.py
./tests
   ./__init__.py
   ./test_foo.py

В моем случае, foo.py - это исполняемый файл, который также содержит некоторые функции, импортированные другим кодом (скажем, bar.py в верхний уровень).

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

Этот ответ говорит либо 1) удалить верхний уровень __init__.py, либо 2) изменить весь импорт (в том числе в foo.py, если он импортирует из каталога верхнего уровня).

Я не хочу сделать 1, потому что в моем foo.py есть функции, которые нужно импортировать в другое место.

Я не хочу делать 2, потому что это ломает foo.py (он импортирует из baz.py, также в верхний уровень).

Что самое простое, что я могу сделать, чтобы foo.py был исполняемым файлом (с основным), был импортируемым и тестируемым с помощью тестов носа?

Я пробовал несколько разных флагов, например,

nosetests --exe --no-path-adjustment --no-skip

Если я должен реструктурировать свой проект, то что рекомендуется? Должен ли я положить foo.py в bin? Это привело бы к импорту функций из bin.foo, что выглядит странно. Должен ли я разделить функции из foo.py на bin и lib? Кажется сложным.

PS Почему тесты носа исключают каталог верхнего уровня, если это пакет? Это кажется странным, и, очевидно, у многих людей есть проблемы с ним (ответ, который я связал, в настоящее время имеет 221 голос).

...