Po patrząc na drugim answe rs tutaj, to jest najlepsza odpowiedź, którą wymyśliłem. To brzydkie, osadzanie całego zestawu testów w obsłudze wyjątków, ale wydaje się, że robi to, co chcesz. W szczególności pomijanie testów, gdy import nie działa.
Zakładając, że mówisz o używaniu nosetests-x do przeprowadzania testów, to powinieneś przejść obok testów, które pomijają, przynajmniej pojawiły się, gdy próbowałem.
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()
Jeśli import nie powiedzie się, zastępuje testowy test pojedynczym testem, który po prostu pomija. Próbowałem też upewnić się, że przypadkowo nie połknie żadnych wyjątków. To rozwiązanie wiele zawdzięcza wszystkim innym odpowiedziom i komentarzom na pytanie.
Jeśli uruchomić go w trybie opisowym widać to, gdy pomija,
test_fail (test_openihm_gui_interface_mixins.TestMissingDependency) ... skipped 'Missing dependency - No module named PyQt4'
FYI, jest blog na ten temat na http://colinnewell.wordpress.com/2012/08/31/skippng-python-unit-tests-if-a-dependency-is-missing/ –
@Mu Mind, działa to tylko z tym, że mówię "nosem", aby "szybko zawieść". Wywołanie metody 'unittest.SkipTest()' wydaje się być liczone jako niepowodzenie i zatrzymuje wykonywanie. –