4

私は unittest モジュールを使用して、Pydev を使用してパッケージの階層構造で作成された Python コードを単体テストしています。実際のソースコードとpydevでの単体テストに別々のソースフォルダーを使用しようとすると、問題が発生します。

project
  |----src
  |     |----com
  |     |     |----myself
  |     |     |       |----MyApplication
  |     |     |       |          |----SampleFileToTest.py  => The application file that I want to test
  |----test
  |     |----com
  |     |     |----myself
  |     |     |       |----MyApplication
  |     |     |       |          |----TestTheSampleFileToTest.py  => My test case file

階層を分離しようとしているときに、テスト ファイルでアプリケーション ファイルを参照する際に問題が発生しています。Junit の方法、つまり、異なるソース フォルダーを使用して同じパッケージ名を維持することは可能ですか?

4

1 に答える 1

2

これは Python 自体ではデフォルトでサポートされていません (つまり、PyDev とは関係ありません) -- 私も Java のバックグラウンドを持っているので、ここで Java の概念をいくつか忘れる必要があるかもしれません :)

Python では、 のフォルダー__init__.pyが見つかるたびに、そのパッケージは他のパスで検索されなくなります。setuptoolsにはそれを機能させるためのハッカーがいくつかあると思います.Python 3がそれをサポートする可能性があることを漠然と覚えていますが、今のところ一般的に推奨されているとは思いません...これはJavaのアプローチとはかなり異なります. Python、フラットはネストされたものよりも優れています-ご存知かもしれませんが、それ以外の場合は、楽しみのために、Pythonインタープリターセッションを開始して「これをインポート」してください:)

つまり、一度my_app/__init__.py見つかると、PYTHONPATH の他の場所にある my_app サブフォルダーを解決しようとしません。

したがって、2 つのアプローチがあります... 通常、私が行うことは、テストを _tests パッケージ内のモジュールに近づけることです。すなわち:

/project
/project/src
/project/src/myapp
/project/src/myapp/__init__.py
/project/src/myapp/_tests
/project/src/myapp/_tests/__init__.py
/project/src/myapp/_tests/test_myapp.py

もう 1 つのアプローチ (テストがコードから切り離されているように感じられるので、あまり好きではないと言わざるを得ません) は、テスト用に別のパッケージを用意することです。

/project
/project/src
/project/src/myapp
/project/src/myapp/__init__.py
/project/src/myapp_tests/__init__.py
/project/src/myapp_tests/test_myapp.py
于 2012-02-09T14:27:40.683 に答える