2011-03-10 7 views
1

私はEclipseでPythonを開発しています。その結果、python srcファイルとテストファイルは異なるディレクトリにあります。pythonテストファイルを実行するには

質問:テストフォルダ内のコマンドライン固有のテストファイルをどのように実行するのですか?これらは明らかにsrcフォルダのファイルに依存します。

乾杯

編集:私は

python test/myTestFile.py 

を実行する場合、私は例えば、依存関係のエラーが発生します。 ImportError:SrcFile1という名前のモジュールがありません

答えて

5

コマンドラインインタプリタがパッケージを見つけたり、Eclipse Pydev内からテストケースを実行できるように、PYTHONPATHが正しく設定されていることを確認する必要があります。 更新:別のオプション:noseを使用してテストを実行すると、パッケージやテストケースを自動検出できるため、作業が少し楽になる可能性があります。

あなたのプロジェクトがそうのようにレイアウトされている場合:

/home/user/dev/ 
    src/pkg1/ 
     mod1.py 

    test/ 
     mod1_test.py 

使用:PYTHONPATH=$HOME/dev/src python test/mod1_test.py。また、開発用にプロジェクトを設定する場合は、distributevirtualenvを使用することをお勧めします。

これはPYTHONPATH環境変数は CHパス焼け焦げPythonのパッケージを拡張する方法を示しています:

% PYTHONPATH=foo:bar python -c 'import sys; print sys.path[:3]' 
['', '/home/user/foo', '/home/user/bar'] 

# exporting the variable makes it sticky for your current session. you can 
# add this to your shell's resource file (e.g. ~/.profile) or source 
# it from a textfile to save typing: 

% export PYTHONPATH=bar:baz 
% python -c 'import sys; print sys.path[:3]' 
['', '/home/user/foo', '/home/user/bar'] 
% python -c 'import sys; print sys.path[:3]' 
['', '/home/user/foo', '/home/user/bar'] 

上記あなたは短期的には行くを取得する必要がありますコメントで質問に対してを更新

。 distributeと virtualenvを使用すると、ワンタイム設定コストが高くなりますが、より長期のメリット が使用されます。チャンスが得られたら、多くのチュートリアルを読み、プロジェクトに適しているかどうかを確認してください。

+0

ありがとうございます!私はpythonpath変数がテストを実行しているものと同じ行に設定されていることに気付きました。テストを実行するときにパスを書き換える必要がないように、srcフォルダを永続的に追加する方法はありますか?それとも、配布とvirtualenvは何ですか? – Karan

+0

私はもう少し詳しく答えを更新します。 – samplebias

1

これには2つの主要な解決策があります。どちらかを使用する必要があります。 PYTHONPATH環境変数を使用して、ソースがどこにあるかをテストするか、関連する__init__.pyファイルを挿入して同じモジュールツリーのテストコードとプロダクションコードを作成する必要があります。後者のアプローチでは、ツリーは次のようになります。

|-- qbit 
| |-- __init__.py 
| |-- master.py 
| |-- policy.py 
| |-- pool.py 
| |-- synchronize.py 
| `-- worker.py 
`-- test 
    |-- __init__.py 
    |-- support.py 
    |-- test_policy.py 
    |-- test_synchronize.py 
    `-- test_worker.py 

__init__.pyが空のファイルにすることができます。

関連する問題