これはさまざまな形で頻繁に尋ねられる質問であり、「あなたはそれを正しくやっていない笑」という回答を得ることがよくあります。それは、人々 (私を含む) が実装として使用しようとしている常識的なシナリオがあり、解決策が明らかではないためです (以前に行ったことがない場合)。
「ボトルから飛び出す」という答えを受け入れます。
与えられた
project/
__init__.py
/code
__init__.py
sut.py
/tests
__init__.py
test_sut.py
tests_sut.py が始まる場所:
import code.sut
ルートディレクトリでノーズテストを実行すると、次のようになります。
ImportError: No module named code.sut
通った道:
a) を使用して相対を行う
from ..code import sut
b) プロジェクトのルートを PYTHONPATH に追加します
c) を使用する
sys.path.append
各テスト モジュールの開始時にインポートの前に .. パスを追加します。
d) することを忘れないでください
setup.py
テストを実行する前に、プロジェクトでモジュールをサイト パッケージにインストールします。
したがって、要件は、プロジェクトにアクセスできるテスト パッケージ ルートの下にテストを配置することです。上記のそれぞれは、私には「自然」とは感じられず、問題があることが判明したか、あまりにも大変な作業のように思えます!
Javaではこれは機能しますが、基本的にビルドツール/ IDEの影響により、すべてのクラスがクラスパスに配置されます。おそらく問題は、Python からの「魔法」を期待していることですか? Flask webframework テストで指摘したように、オプション d) が優先されるようです。
いずれにせよ、好ましい解決策を推奨する以下のステートメントは、私自身の「不自然さ」の感覚を取り除くでしょう.