2012-10-01 26 views
15

La mia cartella di unittest è organizzata in questo modo.Python Unittest discovery con sottocartelle

. 
|-- import 
| |-- import.kc 
| |-- import.kh 
| `-- import_test.py 
|-- module 
| |-- module.kc 
| |-- module.kh 
| `-- module_test.py 
`-- test.py 

che avrei voluto correre semplicemente test.py per eseguire ogni mio *_test.py usando unittest modulo python. Attualmente, il mio test.py contiene

#!/usr/bin/env python 

import unittest 

if __name__ == "__main__": 
    suite = unittest.TestLoader().discover('.', pattern = "*_test.py") 
    unittest.TextTestRunner(verbosity=2).run(suite) 

La documentazione pitone dice che dovrebbe rilevare automaticamente il mio test nelle sottocartelle. Ma non è così.

Al momento, emettere solo

---------------------------------------------------------------------- 
Ran 0 tests in 0.000s 

OK 

sono sicuro che non è un problema con il mio file *_test.py, perché quando li sposto nella directory principale, funziona benissimo .. Cosa am Sto sbagliando?

risposta

19

Aggiungi __init__.py nelle directory import e module.

+0

Ha funzionato semplicemente toccando il file '__init __. Py', grazie. Puoi spiegarmi perché devo farlo? E c'è un'altra soluzione che? Perché sto lavorando con altre persone e vorrei che i test fossero il modo più semplice per creare. – tomahh

+2

Questo è un artefatto del modo in cui viene implementato il rilevamento dei test. In sostanza, ogni directory che contiene un test deve essere importabile come un modulo Python. Vedi i [documenti] (http://docs.python.org/2/library/unittest.html#test-discovery) per maggiori informazioni. –

2

Considerare l'utilizzo di nose invece del modulo vaniglia unittest, se si è in grado di passare. Non avrai bisogno di scherzare con il tuo file test.py o altro; una corsa di nosetests troverà ed eseguirà tutti i test.