1

Pythonパッケージとテストに関して問題があります。私はwxpythonを使用してアプリケーションを作成しており、GUIパーツ用に次の基本的なフォルダー/パッケージ構造を持っています。mainframe.pyウィンドウはlogpane.pyパネルに依存しています。これは、 mainframe.pyの絶対インポートを使用して簡単にインポートできます。

import guiapp.utilviews.logpane

フォルダ/パッケージのレイアウト:

mainapp
   - main.py
   guiapp
       - __init__.py
       utilviews
           - __init__.py
           - logpane.py
           - other stuff...
       mainview
           - __init__.py
           - mainframe.py
           - other stuff here...
       other views...

ただし、アプリケーションのGUI部分については、単体テストに加えて(問題は発生しません)、ビューごとに小さな「テスト」/例を用意します。つまり、ログペインの場合、レイアウトに問題がないことなどをテストするためのビューを示すベアボーンアプリケーションを起動する小さな実行可能な例が必要です。私が始めた方法は、

if __name__ == "__main__":
    # create some small window and a wx app
    # instanciate the panel and launch the app
    pass

パネル/ビュー自体の実際の実装ファイル内。これはlogpaneにとって不思議に働きました。ファイルをスタンドアロンで実行して、ビューを確認し、一緒に保持されていることを確認できます。

しかしもちろん、logpane.pyへの依存関係を解決できなかったため、 mainframe.pyの戦略は崩壊しました。これは、現在のメインモジュールmainframe.pyであり、mainframe.pyがutilviewsパッケージに到達できる唯一の方法は、メイン/起動されたモジュールがツリーのさらに上にある場合です。

では、これらのタイプのテストをどのように構成すればよいでしょうか。単体テストでは、 noseはmainappフォルダーごとに起動されるため、問題を処理する優れたnoseを使用します(したがって、すべてのパッケージ内参照が機能します)。しかし、これらのテストは小さなスタンドアロンプ​​ログラムのようなものです。mainappフォルダーをこれらのpythonファイルで乱雑にすることはできません(そのようなファイルはたくさんあります)。これを達成する他の方法はありますか?

どんな入力も貴重です。

ありがとう、リッカード

4

1 に答える 1

2

を使用できますPYTHONPATH。テストファイルを実行する前に、メインプロジェクトディレクトリに設定してください。その後、そのディレクトリから実行する場合と同じように、すべてのインポートを解決できるようになります。

$ find
.
./test
./test/test.py
./some
./some/__init__.py

$ cat some/__init__.py 
x = 10

$ cat test/test.py 
import some
print some.x

$ cd test
$ export PYTHONPATH=..
$ python test.py
10
于 2010-03-29T07:43:39.710 に答える