ここで他の答えを見た後、これは私が思いついた最良の答えです。テストスイート全体を例外処理に埋め込むのは醜いですが、それはあなたが望むことをしているように見えます。特に、インポートが機能しない場合はテストをスキップします。
テストを実行するためにnosetests-xを使用することについて話していると仮定すると、スキップするテストを超えて実行する必要があります。少なくとも、私が試したときはそう見えました。
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()
インポートが失敗した場合、テストの実行は単にスキップする単一のテストに置き換えられます。また、意図せずに例外を飲み込まないように努めました。この解決策は、質問に対する他のすべての回答とコメントに多くを負っています。
詳細モードで実行すると、スキップしたときにこれが表示されます。
test_fail (test_openihm_gui_interface_mixins.TestMissingDependency) ... skipped 'Missing dependency - No module named PyQt4'