我正在使用最新版本的mock和python 2.7.3
我正在构建我的第一个烧瓶应用程序,我正在测试一些基本的中间件,看看是否发生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引发的与我在断言本身期望的那个不一样。
如果我只关心类型,而不是实际的实例,我怎么能重写断言?
答案 0 :(得分: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'>