2011-08-03 13 views
8

私が取り組んでいるプロジェクトの中核部分を書き終えたところで、私が続行する前にunittestを使ってテストを書いてみたいです。私はこれを前もって行うべきだったことを知っていますが、始めたときにはPythonを知らなかったので、何でも..親ディレクトリからモジュールをインポートするにはどうすればよいですか? (ユニットテストの目的)

私が達成したいこと:私はメインパッケージのサブパッケージを持っています。その内部でテストしたいすべてのモジュールが含まれています。私はサブパッケージを「テスト」と呼ばれるものの中に入れたいと思っています。テストケースのすべてを含んでいます。パッケージの外側からテストスイートに集約したいので、最終的にはすべてのテストを実行できます。プロジェクト全体を1つにまとめます。

/projectPackage 
/projectPackage/package 
/projectPackage/package/\__init__.py (empty) 
/projectPackage/package/someModule.py 
/projectPackage/package/... (more modules) 
/projectPackage/package/testing.py (runs all the tests in /tests/) 
/projectPackage/package/tests 
/projectPackage/package/tests/\__init__.py (empty) 
/projectPackage/package/tests/someModuleTests.py 

私が午前問題:

someModuleTestsは、そのメソッドをテストすることができるように親パッケージからsomeModuleをインポートする必要があります

構造はこのようなものです。これはうまくいかないようです。

Attempted relative import beyond toplevel package 

とにかく、私はPythonのnoobだと思っています。私はこのプロジェクトのためにどうやってそれを行うのかについて私自身は考えていますが、それぞれが異なっているためですが、中規模の大規模なPythonプロジェクトの構造に関する一般的なアドバイスも感謝しています。

答えて

13

ディレクトリがPYTHONPATHにあるように、親ディレクトリからユニットテストを実行します(現在の作業ディレクトリは常にです)。これは親ディレクトリからテストファイルを実行するか、パッケージ内のすべてのテストを再帰的に探すnosetestのようなものを使って行います。

相対インポートは使用しないでください。このようなことが起こります。あなたのPYTHONPATHやsys.pathをハックしないでください。

+0

オーケー素晴らしい、ありがとう。私はあなたをアップアップしますが、十分な評判はありません:S –

+0

問題はありませんが、あなたは私の過去を答えとして選ぶことができます。 – ikanobori

1

コードを実行できる場合は、PYTHONPATHがすでに正しく設定されているはずです。必要なのは、インポートするモジュールを指定することです。

あなたのテストを実行するコマンドラインツールを使用している、あなたは the docsに従うと、次のようなものを持つことができることを考えると
import projectPackage.package.someModule 
1

python -m unittest package.tests.someModuleTests 
関連する問題