2015-12-04 18 views
5

私はPythonのインポート権を得るのを苦労しています。私が達成したいのは、いくつかのソースファイルを持つモジュールと単体テストのあるテストフォルダです。py.testは私のモジュールをインポートできません

私が何をしても、py.test-3にテストを実行することはできません。私のディレクトリレイアウトは次のようになります。

. 
├── module 
│   ├── __init__.py 
│   └── testclass.py 
└── tests 
    └── test_testclass.py 

__init__.pyファイルは次のようになります。

__all__ = ['testclass'] 

testclass.pyファイルは次のようになります。

class TestClass(object): 

    def __init__(self): 
     self.id = 1 

そして、私のユニットテストこのように:

import pytest 
from module import TestClass 

def test_test_class(): 
    tc = TestClass() 
    assert(tc.id==1) 

どんなに私はで終わるだろうpy.test-3を呼び出す方法:あなたがtests/test_testclass.pyを変更しない限り

E ImportError: No module named 'module' 

答えて

7

まず、あなたは以下のようmodule/__init__.pyを変更する必要はありません:

from .testclass import TestClass 

__all__ = ['TestClass'] 

そして、あなたはpy.testを実行したときにモジュールを見つけるために、ときインタプリタが知っているようにPYTHONPATH環境変数を設定します。

PYTHONPATH=. py.test 
+0

http://asciinema.org/a/a94r31cms8zdqtf8p1dn38vma – falsetru

+1

これが私の作品!それはそれを行うのpythonic方法だろうか?まだ図書館のレイアウトがどのように最良に見えているかはまだ分かりません。 – Fabian

+1

@ファビアン、そう思う。少なくとも、テストコードを変更する必要はありません。 – falsetru

1

私はpytestのためのテストファイルパスの実行のヘッダに置きます:

例:私は私の(テスト)プロジェクト内の任意のサブフォルダのパスを知ることができこれにより

import os, sys                 
sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir)) 

+0

私はDRYの原則に反するテストファイルでこれを繰り返さなければならないので、私はこの解決策の本当のファンではありません。 – Fabian

+1

これはtests /フォルダの "\ __ init \ __。py"に置くことができ、ディレクトリ全体に対してこれを繰り返す必要はありません。 –

関連する問題