2017-01-13 4 views
0

私のプロジェクトでは、私が単体テストしたいpythonアプリケーションを含むサブディレクトリを持っています。次のように 構造が見えます:Noseへのインポートパスのベースディレクトリを提供します

my-project/ 
    python-app/ 
    sometool/ 
     __init__.py 
     foo/ 
     __init__.py 
     aaa.py 
     bar/ 
     __init__.py 
     bbb.py 
    test/ 
     sometool-tests/ 
     foo-tests/ 
      aaa_test.py 

aaa.pyは、アプリケーションのベースディレクトリを前提としていimport sometool.bar.bbbなどの輸入を、含まれている確かに私のビルド設定でケースである、python-appです。

aaa_test.py明らかにそれをテストするためにaaaをインポートします。 nosetests ./python-app/sometool/testをメインプロジェクトディレクトリから実行すると、my-projectがインポートのベースディレクトリになります。つまり、そこからsometool.bar.bbbが見つかりません。インポートは失敗します。

cdpython-appに最初に入力し、そこからnosetests ./sometool/testを実行すると、すべて正常に動作します。 しかし、これらのテストをショートカットを使って実行するようにVisual Studio Codeを設定したいのですが、それらのコマンドは常にプロジェクトルートから実行されているようです。

Noseに引数として「ベースディレクトリ」を渡す方法はありますか?例えば

import sys 
import os 
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) 

import python-app 

次に、あなたがあなたのテストでpython-appをインポートすることができ、コンテキストモジュールからインポート、:

答えて

1

あなたはnosetests環境でモジュールを提供するコンテキストを使用することができます。

my-project/ 
    python-app/ 
    ... 
    test/ 
    context.py 

context.py aaa_test.pyに:

from tests.context import python-app 
from python-app.sometool import foo, bar 

これはnosetestsは常にPythonのアプリ、それが実行されているどんなにを見つける行う必要があります。

+0

ありがとうございます!すべてのテストファイルに 'context'をインポートする必要がないように、' context.py'の代わりに '__init __。py'にパス操作コードを入れました。また、 'python-app'をインポートする必要はないようです。 –

関連する問題