Dopo guardando l'altro answe qui, questa è la migliore risposta che ho trovato. È brutto, incorporando l'intera suite di test nella gestione delle eccezioni, ma sembra che faccia ciò che vuoi. Saltare in modo specifico i test quando le importazioni non funzionano.
Supponendo che si stia utilizzando l'uso di nosetest -x per l'esecuzione dei test, dovrebbe passare oltre i test che saltano, almeno a quanto sembrava quando l'ho provato.
import unittest
try:
import PyQt4
# the rest of the imports
# actual tests go here.
class TestDataEntryMixin(unittest.TestCase):
def test_somefeature(self):
# ....
except ImportError, e:
if e.message.find('PyQt4') >= 0:
class TestMissingDependency(unittest.TestCase):
@unittest.skip('Missing dependency - ' + e.message)
def test_fail():
pass
else:
raise
if __name__ == '__main__':
unittest.main()
Se l'importazione fallisce, sostituisce l'esecuzione di test con un singolo test che salta semplicemente. Ho anche cercato di assicurarmi che non ingerisse eccezioni involontariamente. Questa soluzione deve molto a tutte le altre risposte e commenti alla domanda.
Se lo si esegue in modalità dettagliata si vedrà questo quando si salta,
test_fail (test_openihm_gui_interface_mixins.TestMissingDependency) ... skipped 'Missing dependency - No module named PyQt4'
fonte
2012-09-20 10:12:54
FYI, c'è un post sul blog su questa cosa esatta su http://colinnewell.wordpress.com/2012/08/31/skippng-python-unit-tests-if-a-dipendenza-is-missing/ –
@Mu Mind, questo funziona eccetto che sto dicendo 'nose' to "fail fast". Chiamare 'unittest.SkipTest()' sembra contare come un fallimento e interrompe l'esecuzione. –