Как использовать assertRaises в пробном тестовом примере с помощью inlineCallbacks

Я пытаюсь понять, как написать пробный тестовый пример, который утверждает, что возникло исключение.

В настоящее время у меня есть 2 простых метода тестирования (успешный и неудачный). Каждый метод возвращает deferred, который уже был либо обратным вызовом, либо ошибочным. Проверка метода успеха работает нормально. При тестировании метода сбоя я ожидаю, что смогу утверждать, что было возбуждено исключение (используя assertRaises).

Однако тестовый пример не проходит, и я получаю:

twisted.trial.unittest.FailTest: ConnectionRefusedError not raised (<Deferred at 0x920e28c current result: <twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionRefusedError'>>> returned)

Код выглядит следующим образом:

from twisted.trial.unittest import TestCase
from twisted.internet.defer import inlineCallbacks, succeed, fail
from twisted.internet.error import ConnectionRefusedError

class MyObject:
    def success(self):
        return succeed(True)

    def failure(self):
        return fail(ConnectionRefusedError())


class TestErrBack(TestCase):
    def setUp(self):
        self.o = MyObject()

    @inlineCallbacks
    def test_success(self):
        result = yield self.o.success()
        self.assertTrue(result)

    @inlineCallbacks
    def test_failure(self):
        # this test case is failing !
        yield self.assertRaises(ConnectionRefusedError, self.o.failure)

Правильно ли я использую подход в test_failure? Я могу использовать try...catch вокруг вызова self.o.failure, но я не думаю, что этот подход так же хорош, как использование assertRaises.

11
задан Jean-Paul Calderone 23 March 2012 в 20:14
поделиться