2012-10-10 1 views
2

모의 및 파이썬의 최신 버전을 사용하고 있습니다. 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) 

는) 무단 예외 호출 제기 (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 

은 어설 실패했다 주장 내가 asser에서 기대하고있는 것과 같다. 그것 자체.

실제 인스턴스가 아닌 유형 만 신경 쓰면 어설 션을 어떻게 다시 작성할 수 있습니까?

답변

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'> 
입니다