これは解決するのが簡単だと確信していますが、私はそれをあまりにも凝視しています。ヒント/ヒント/提案/解決方法unittest用のアプリエンジンアプリの親ディレクトリをインポート
私のアプリエンジンアプリにunittestsを追加しようとしています。私はhttp://code.google.com/appengine/docs/python/tools/localunittesting.htmlのtestrunner.pyの例(ページの一番下)を使用しています。これは、アプリケーションのルート(myapp)にunittestファイル( 'test_lib.py'という名前)を置くとうまく動作しますが、アプリケーション内の別のサブディレクトリ(testsという名前)にテストを移動します。今では、アプリケーションからいくつかのモジュールをインポートする必要がありますが、unittestファイルの作業ディレクトリが1レベル深くなっているので、実際のモジュールはアプリケーションエンジンのアプリケーションからは見えません。
私がテストに__のinit__.pyを追加しようとしたし、次のコードを追加しました:
import os
import sys
sys.path.append(os.path.dirname(os.getcwd()))
私は、これは現在の作業ディレクトリを検索し、1つのレベル上を移動して、これを追加することを望みましたsys.pathから、私はunittestファイル( 'test_lib.py')で 'util.lib'をインポートすることができます。しかし、私がtestrunner.pyを実行すると、 "ImportError:No module util.lib"というエラーが表示されます。ここで、rootという名前のmyapp内のutilというサブディレクトリ内のlibというモジュールをインポートしようとしています。私のディレクトリ構造は次の通りです:
testrunner.py
|- myapp
|- __init__.py
|- util
|- __init__.py
|- lib.py
|- tests
|- __init__.py ## this file has the import mentioned above.
|- test_lib.py
私はまた、アプリケーションのルートのインポートをtestrunnerに追加しようとしましたが、これは同じエラーを返します。
def main(sdk_path, test_path):
sys.path.append(os.path.dirname(test_path)) ## This line I added to the testrunner.
sys.path.insert(0, sdk_path)
import dev_appserver
dev_appserver.fix_sys_path()
suite = unittest2.loader.TestLoader().discover(test_path)
unittest2.TextTestRunner(verbosity=2).run(suite)
そして、私は、次のコマンドを使用してテストを呼び出しています:
./testrunner.py ~/sdk/google_appengine/ myapp/tests/
任意の提案私がここで行方不明です何?
が働いた:sys.path.append(os.path.abspath(os.path.dirname(os.path.dirname(test_path)))) – reallife
あなたの最初の'os.getcwd()'が実行しているディレクトリ、つまりmyappの親ディレクトリであるため、試行が失敗しました。 'os.path.dirname(__ file __)'を使ってパスをアプリケーションにエンコードする必要を避けることができます。 –