Как утверждать, что макет был вызван с определенным типом, а не экземпляром?
Я использую последнюю версию mock и python 2.7.3
Я создаю свое первое приложение flask и тестирую некоторые базовые промежуточные программы, чтобы увидеть, есть ли flask.abort() происходит (и когда это происходит, я утверждаю, что метод был вызван с несанкционированным исключением)
def test_invokes_raise_http_exception_when_apply_blows_up(self):
start_response = mock.Mock()
self.sut = BrokenMiddleware(self.app)
with mock.patch.object(self.sut, 'raise_http_exception') as raise_up:
self.sut.__call__({}, start_response)
raise_up.assert_called_once_with(Unauthorized(), start_response)
class BrokenMiddleware(Middleware):
def apply_middleware(self, environ):
flask.abort(401)
Вот мой производственный код
class Middleware(object):
def __call__(self, environ, start_response):
try:
self.apply_middleware(environ)
except Exception as e:
return self.raise_http_exception(e, start_response)
def raise_http_exception(self, exception, start_response):
pass
Проблема, с которой я сталкиваюсь, заключается в том, что mock не выполняет утверждение, потому что поднятый 401 не совпадает с тем, который я ожидаю в самом утверждении.
Если бы я только заботился о тип, а не фактический экземпляр как я могу переписать утверждение?
1 ответ:
Вам, вероятно, это не понравится, но вот как я делал то же самое в прошлом:
self.assertIsInstance(raise_up.mock_calls[0][1][0], Unauthorized)
Вот некоторое объяснение
>>> print raise_up.mock_calls [call(Unauthorized())] >>> print raise_up.mock_calls[0] call(Unauthorized()) >>> print raise_up.mock_calls[0][1] (Unauthorized(),) >>> print type(raise_up.mock_calls[0][1][0]) <type 'Unauthorized'>