Как определить, произошел ли сбой TestCase в Python 2.7

В главе 20 тестовой разработки Гарри Персиваля с Python есть функция, чтобы определить, не провалился ли TestCase, чтобы он мог сделать скриншот:

# StaticLiveServerTestCase is a descendant of unittest.TestCase
class FunctionalTest(StaticLiveServerTestCase):
    def tearDown(self):
        if self._test_has_failed():
            # ... snipped for brevity
        self.browser.quit()
        super().tearDown()


    def _test_has_failed(self):
        for method, error in self._outcome.errors:
            if error:
                return True
        return False

Это _outcomeсвойство реализовано в классе TestCase в Python 3.4, но не в Python 2.7. Есть ли какой-то способ определить, имел ли TestCase ошибку в Python 2.7?

1 ответ

  1. В Python 2.7 можно использовать self._resultForDoCleanups который является экземпляром unittest.результат.TestResult. Обязательно проверьте оба self._resultForDoCleanups.errorsи self._resultForDoCleanups.failures:

    def _test_has_failed(self):
        for method, error in self._resultForDoCleanups.errors:
            if error:
                return True
        for method, failure in self._resultForDoCleanups.failures:
            if failure:
                return True
        return False