2013-03-12 12 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包括項目目錄

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

在Linux中,你可以做

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

,並應包括以上運行Python測試腳本的目錄,這是項目文件夾

8

我不認爲這是處理這個問題的最有效或最安全的方式,但這是我將庫添加到我的unittesting

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

這將從根本上添加了一個文件夾到你訪問的資源的列表,然後用它來包含父文件夾lib

另外,你可能會做一些像import .. from lib.class。請查看here瞭解有關相關導入的更多信息。