2016-05-26 12 views
3

py.testで実行するテストファイルに何かをインポートする際に問題があります。py.testで使用するために兄弟ディレクトリからモジュールをインポートする

次のように私は、プロジェクトの構造を持っている:

/ProjectName 
| 
|-- /Title 
| |-- file1.py 
| |-- file2.py 
| |-- file3.py 
| |-- __init__.py 
| 
|-- /test 
| |-- test_file1.py 

私はtest_file1.pyファイル内pytestで作業を任意のimport文を取得することができていない、ので、現在はちょうどfile_1.pyで宣言された変数を使用しようとしていますtest_file1.pyを実行すると印刷されます。

file1.pyは含まれています

file1_variable = "Hello" 

test_file1.pyは含まれています

import sys 
import os 
sys.path.append(os.path.abspath('../Title')) 
import file1 

def test_something(): 
    assert file1.file1_variable == "Hello" 

print(file1.file1_variable) 

私のテストファイルからのインポート文がPYTHONPATH変数を編集して作品https://stackoverflow.com/a/10272919/5477580から取られています。これにより、test_file1.pyスクリプトを実行し、printステートメントを正常に実行することができます。

はしかし、/ProjectNameディレクトリからpy.testを実行しようとするとImportError: No module named 'file1'

を言って私にエラーを与える私はそれpytestが可能になり、より良いものを構築することが可能ないくつかの方法はありますか? __init__.pyファイルに何かを追加する必要がありますか?

答えて

2

いいえあなたは__init__.pyに何も追加する必要はありません。このファイルは、親ディレクトリをモジュールとして扱い、described hereとしてインポートするようにpythonに指示します。 はちょうどあなたのタイトルのディレクトリに追加し、ここに

from ..Tiltle.file import file1_variable 

は、我々はちょうど..テストディレクトリからタイトルのパッケージに到達するためであるcd ..

ノートのようなディレクトリに、上記1つの階層を移動しているようにそれをインポートします。あなたが働いているあなたが

from Tiltle.file import file1_variable 
+0

を行う必要がありますプロジェクト名ディレクトリからファイルを実行する必要がある場合は、どうもありがとうございました。私は階層的なインポートステートメントの構造を誤解していたと思う。しかし、file1.pyにインポート文があると、私のpytestは再びエラーになるようです。たとえば、file1.pyがfile2.pyからいくつかの関数をインポートすると、pytestはfile2.pyという名前のモジュールがないと言うでしょう。テストファイルに明示的に宣言する必要がありますか? – Shinkawa91

関連する問題