testsフォルダーを個別に をアプリケーションコードに追加します。私のプロジェクト構造はそうです
myproject/
myproject/
myproject.py
moduleone.py
tests/
myproject_test.py
myproject.py
from moduleone import ModuleOne
class MyProject(object)
....
myproject_test.py
from myproject.myproject import MyProject
import pytest
...
コマンドを使用するため、myproject.myproject
を使用します
python -m pytest
プロジェクトのルートディレクトリから./myproject/
ただし、これらのモジュール内のインポートは失敗します
E ModuleNotFoundError: 'moduleone'という名前のモジュールはありません
私はPython 3.7を実行していて、3.3以降それを読んだので、空の__init__
ファイルは不要になりました。つまり、私のプロジェクトは 暗黙の名前空間パッケージ)になります
ただし、__init__.py
にmyproject/myproject/
ファイルを追加しようとしました。また、conftest.py
にmyproject/
ファイルを追加しようとしましたが、どちらも機能しません
私は 回答を読む と言う パスを混乱させる があり、次に しない と言っている他の質問にコメントを賛成しました。
正しい方法は何ですか、何が欠けていますか?
編集;
おそらく関連しているので、requirements.txt
を使用して、pipを使用してpytestをインストールしました。これは関係がありますか?もしそうなら、この場合pytestをインストールする正しい方法は何ですか?
編集2:
sys.path
のパスの1つは/usr/src/app/
で、これは/my/local/path/myproject/
に沿って並べられたドッキングボリュームです。
代わりにボリュームを/my/local/path/myproject/myproject/
にする必要がありますか?
したがって、sys.path
には、アプリケーションディレクトリとテストディレクトリを含むプロジェクトルートフォルダではなく、アプリケーションディレクトリを含める必要があるようです。
したがって、私の場合、/my/local/path/myproject/myproject/
はsys.path
ではなく/my/local/path/myproject/
である必要がありました。
次に、/my/local/path/myproject/
でpytest
を実行できます(python -m pytest
は必要ありませんでした)。つまり、/myproject/myproject/
内のモジュールは、名前空間を入れ子にすることなく、お互いとテストを見つけることができます。
だから私のテストは
from moduleone import ModuleOne
import pytest
def test_fun():
assert ModuleOne.example_func() == True
そうは言っても、 多くの問題 があるようですので、これが正しいかどうかはわかりません。