2016-07-06 6 views
0

ich python3 bin mit zu versuchen und eine Testdatei für Beispielanwendung erhalten arbeiten noch hält es ImportError: No module named 'calculate'Python3 Testimport Fehler

meine Dateistruktur zu werfen ist:

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

Ich kann nicht herausfinden, warum das so ist der Fall würde jede Hilfe sehr geschätzt werden.

Die __init__.py Dateien sind leer.

calculate.py enthält:

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 enthält:

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() 

I python test/calculate_test.py von der Wurzel /calculate Ordner leite und ich erhalte die Fehler

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

Ich habe mit verschiedenen Strukturen herumgespielt und kann nicht verstehen, was das Problem ist.

+0

vielleicht hilft: http://stackoverflow.com/questions/4142151/python-how-to-import-the-class-im-selben-verzeichnis-oder-unter-verzeichnis –

Antwort

0

Die Struktur Ihres Projekts ist der Grund. Das Testskript hat nicht das äußere Verzeichnis im Suchpfad, wenn Sie es starten. Hier sind einige Möglichkeiten, um das zu beheben

  1. Verschieben Sie die Testdatei in das gleiche Verzeichnis, das das Modul enthält, das es importiert. Dies erfordert keine Änderungen in der Testdatei.
  2. Mit dieser Struktur

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

    Dies erfordert, dass Sie wie der Import Signatur in calculate_test.py, um etwas zu ändern from calculate import calculate

+0

Ich bekomme jetzt eine Fehlermeldung, die besagt, dass "Name Calculate ist nicht definiert" bei der Definition von 'self.calc = Calculate() 'in der Setup-Methode. – SJC

+0

calculate_test.py muss auf Calculate von calculate/calculate.py zugreifen, so dass Sie "von calculate.calculate import Calculate" brauchen –

+0

Ich denke, es ist besser, die Tests innerhalb der Pakete Hierarchie –