필자는 파이썬 mock을 사용하지 않았습니다.조롱 된 객체가 반환 한 객체를 조롱하는 방법은 무엇입니까?
분명히 나는 다음과 같은 방법으로 실제 방법 requests.post()
를 호출하는 내 테스트 코드를 원하지 않는, 그래서 대신 행동을 조롱하려는 :
def try_post(self, url, body):
r = requests.post(url, data=body)
msg = str(r.status_code) + " " + r.content + "\n"
if r.status_code >= 300:
sys.stderr.write("Error: POST returned " + msg)
내 질문 : 어떻게 객체를 조롱 않습니다 응답 객체 인 requests.post()
에 의해 반환됩니까?
예를 들어, r.status_code가 200이고 r.status_code가 300 인 테스트를 작성하여 조건부 로직을 테스트 할 수 있습니다. 또한 일부 문자열을 반환하려면 r.content를 조롱해야합니다.
내 비 작동 코드는 다음과 같습니다 r.status_code 및 r.content 객체가 아닌 문자열을 mock.MagicMock을 평가하기 때문에
from monitor_writer import MonitorWriter
import mock
import unittest
class TestMonitorWriter(unittest.TestCase):
@mock.patch('monitor_writer.requests')
def test_conforming_write(self, mock_requests):
xml_frag = """
<InstantaneousDemand>
</InstantaneousDemand>
"""
mock_requests.status_code.return_value = 200
mock_requests.content.return_value = "OK"
writer = MonitorWriter()
writer.update(xml_frag)
self.assertTrue(mock_requests.post.called, "Failed to call requests.post")
이 테스트는 TypeError: expected a character buffer object
에 실패하고 try_post() 메소드에 시도 그들을 연결하십시오. 우리는 당신이 실제로 호출하는 기능을 조롱하면
class TestMonitorWriter(unittest.TestCase):
@mock.patch('monitor_writer.requests.post')
def test_conforming_write(self, mock_post):
xml_frag = """
<InstantaneousDemand>
</InstantaneousDemand>
"""
response = mock.MagicMock()
response.status_code = 200
respone.content = "OK"
mock_post.return_value = response
writer = MonitorWriter()
writer.update(xml_frag)
self.assertTrue(mock_post.called, "Failed to call requests.post")
, 우리는 모의 응답 객체를 생성에 status_code
및 content
을 설정
이제 나는 그것을 보았고, 그렇게 많은 의미가 있습니다. 그리고 그것은 작동합니다. 나를 똑바로 세워 줘서 고마워. (FWIW, 내가 읽은 튜토리얼 및 빠른 시작에서 찾을 수 없었습니다.) –