2016-07-06 62 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

我认为在包层次结构中进行测试是更好的做法 –