2013-03-12 8 views
5

私はPythonとunittestに関する非常に基本的な質問があります。Pythonでunittestからクラスをインポートするには?

私はこのようなディレクトリ構造を持っています。

Project 
    | 
    |-lib 
     | 
     |-__init__.py 
     |-class.py 
    | 
    |-tests 
     | 
     |-__init__.py 
     |-test_class.py 

これはtest_class.pyの内容です。私がlib.classをルートフォルダからインポートすると、うまくいきます。しかし、どこか他の場所からファイルをインポートすると、それは動作しません。

 

import unittest 
from lib.class import Class 

class TestClass(unittest.TestCase): 
    def testClass(self): 
      // do some test 

def main(): 
    unittest.main() 

if __name__ == '__main__': 
    main() 
 

私はこのエラーに

 

Traceback (most recent call last): 
    File "tests/test_class.py", line 2, in 
    from lib.class import Class 
ImportError: No module named lib.class 

 

ない私は、ルートフォルダではありません別のフォルダからファイルをインポートする方法がわからを持ってテストを実行します。

答えて

1

変更sys.pathプロジェクトのディレクトリにLinuxの

import sys 
sys.path.append('/path/to/Project') 

が含まれるように、あなたは

import sys, os 
sys.path.append(os.path.abspath(sys.path[0]) + '/../') 

を行うことができ、それは、プロジェクトフォルダ

で実行されているPythonのテストスクリプト、上記のディレクトリを含める必要があります
8

これは、これを処理するための最も効率的で安全な方法ではないと私は考えていますが、これは私がにライブラリを追加する方法です。

import unittest, os, sys 
sys.path.append(os.path.abspath('..')) 
from lib.class import Class 

これは本質的にアクセス可能なリソースのリストに以前のフォルダを追加し、親フォルダlibを含めるためにそれを使用します。

他にも、import .. from lib.classのようなものがあります。相対輸入の詳細についてはhereをご覧ください。

関連する問題