2016-07-06 63 views
0

我使用python3,試圖得到一個測試文件示例應用程序但它不斷拋出ImportError: No module named 'calculate'Python3測試導入錯誤

我的文件結構是:

/calculate 
    __init__.py 
    calculate.py 
    test/ 
    __init__.py 
    calculate_test.py 

我想不通這是爲什麼這種情況下,任何幫助將不勝感激。

__init__.py文件爲空。

calculate.py包含:

class Calculate(object): 
    def add(self, x, y): 
     return x + y 

if __name__ == '__main__': 
    calc = Calculate() 
    result = calc.add(2, 2) 
    print(result) 

calculate_test.py包含:

import unittest 
from calculate import Calculate 

class TestCalculate(unittest.TestCase): 
    def setUp(self): 
     self.calc = Calculate() 

    def test_add_method_returns_correct_result(self): 
     self.assertEqual(4, self.calc.add(2,2)) 

if __name__ == '__main__': 
    unittest.main() 

我正在從根/calculate文件夾python test/calculate_test.py和正在錯誤

Traceback (most recent call last): 
    File "test/calculate_test.py", line 2, in <module> 
    from calculate import Calculate 
ImportError: No module named 'calculate' 

我一直在擺弄着不同的結構,無法理解問題是什麼。

+0

這也許可以幫助:http://stackoverflow.com/questions/4142151/python-how-to-import-the-class-within-the-same-directory-or-sub-directory –

回答

0

您的項目結構是原因。測試腳本在啓動時沒有搜索路徑中的外部目錄。這裏有一些方法可以解決這個問題

  1. 將測試文件移動到包含它所導入的模塊的相同目錄中。這將不需要更改測試文件。
  2. 使用此結構

    ./project/ 
        calculate_test.py 
        calculate/ 
         __init__.py 
         calculate.py 
    

    這就需要你在calculate_test.py更改導入簽名像from calculate import calculate

+0

當我定義'self.calc ='時,我現在收到一個錯誤,說'name Calculate is not defined'在setup方法中計算()'。 – SJC

+0

calculate_test.py需要訪問Calculate from calculate/calculate.py,所以你需要「from calculate.calculate import Calculate」 –

+0

我認爲在包層次結構中進行測試是更好的做法 –