2011-09-16 9 views
0

これは解決するのが簡単だと確信していますが、私はそれをあまりにも凝視しています。ヒント/ヒント/提案/解決方法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/ 

任意の提案私がここで行方不明です何?

+0

が働いた:sys.path.append(os.path.abspath(os.path.dirname(os.path.dirname(test_path)))) – reallife

+0

あなたの最初の'os.getcwd()'が実行しているディレクトリ、つまりmyappの親ディレクトリであるため、試行が失敗しました。 'os.path.dirname(__ file __)'を使ってパスをアプリケーションにエンコードする必要を避けることができます。 –

答えて

2

絶対パスを使用しようとしましたか? testrunner.pyメイン機能にこれを追加すること

sys.path.append(os.path.abspath(os.path.dirname(test_path))) 
+0

残念ながら、それはうまくいきませんでしたが、あなたはtestrunner.py行の良い点を挙げています。あなたも一緒に考えて感謝:) – reallife

+0

しかし、これをtestrunner.pyコードに追加しました! sys.path.append(os.path.abspath(os.path.dirname(os.path.dirname(test_path)))))ありがとう!! – reallife

関連する問題