我正在使用最新版本的 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 与我在断言本身中预期的不同。
如果我只关心类型,而不关心实际实例,我该如何重写断言?
最佳答案
你可能不会喜欢它,但这就是我过去做同样事情的方式:
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'>
关于python - 如何断言模拟是用特定类型而不是实例调用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12821090/