2013-03-12 19 views
5

Ho una domanda molto basilare su Python e unittest.Come importare una classe da unittest in python?

Ho una struttura di directory come questa.

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

Ora questo è il mio contenuto di test_class.py. Se imparo lib.class dalla cartella radice funziona correttamente. Ma se importare il file da qualche altra parte non funziona.

 

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

Quando eseguo il test ho ottenuto questo errore

 

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

 

Non so come faccio a importare il file da un'altra cartella che non è la cartella principale.

risposta

1

Modifica sys.path per includere la directory del progetto

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

Su Linux, si potrebbe fare

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

e che dovrebbe includere la directory sopra lo script di test Python in esecuzione, che è la cartella di progetto

8

Non penso che questo sia il modo più efficiente o sicuro per gestirlo, ma è così che aggiungo le librerie nel mio unittesting.

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

Questo sarebbe essenzialmente aggiungere la cartella precedente alla tua lista di risorse accessibili, e quindi utilizzare tale per includere la cartella principale lib.

In alternativa si potrebbe probabilmente fare qualcosa come import .. from lib.class. Dai un'occhiata a here per ulteriori informazioni sulle importazioni relative.

Problemi correlati