2013-03-12 13 views
5

Mam bardzo podstawowe pytanie dotyczące Pythona i unittest.Jak zaimportować klasę z unittest w python?

Mam strukturę katalogów w ten sposób.

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

To jest moja treść test_class.py. Jeśli zaimportuję plik lib.class z folderu głównego, to działa poprawnie. Ale jeśli zaimportuję plik z innego miejsca, to nie działa.

 

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

Kiedy uruchamiam test dostałem ten błąd

 

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

 

Nie wiem, jak mogę zaimportować plik z innego folderu, który nie znajduje się w katalogu głównym.

Odpowiedz

1

Zmienić sys.path zawierać katalogu projektu

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

W systemie Linux można zrobić

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

i które powinny zawierać katalog nad systemem skryptu testowego Python, który to folder Projekt

8

Nie sądzę, że jest to najskuteczniejszy lub bezpieczny sposób, aby sobie z tym poradzić, ale w ten sposób dodaję biblioteki do mojego unittesting.

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

To zasadniczo dodać poprzedni folder do listy dostępnych zasobów, a następnie używać, aby to folder nadrzędny lib.

Alternatywnie prawdopodobnie zrobiłbyś coś takiego jak import .. from lib.class. Zajrzyj here, aby uzyskać więcej informacji na temat importu względnego.

Powiązane problemy