2

私はモックとpython 2.7.3の最新バージョンを使用しています

私は最初のフラスコアプリを構築しており、いくつかの基本的なミドルウェアをテストして、flask.abort() が発生するかどうかを確認しています (発生した場合は、Unauthorized 例外でメソッドが呼び出されたと主張します)。

    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

私が抱えている問題は、発生した 401 がアサーション自体で期待しているものと同じではないため、モックがアサートに失敗することです。

実際のインスタンスではなく、タイプのみを気にする場合、どうすればアサーションを書き直すことができますか?

4

1 に答える 1

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'>
于 2012-10-10T14:27:41.283 に答える