【发布时间】:2021-12-13 12:25:48
【问题描述】:
我最近开始学习如何使用来自 unittest 库的模拟,但在弄清楚如何正确模拟类依赖项时遇到了问题。
下面是我试图模拟的例子
client.py
class HttpClient:
def request(self, method, url, params = None):
if method == "GET":
return requests.get(url)
elif method == "POST":
return requests.post(url, body=params)
这里我将 HttpClient 对象注入到 Post 类中
据我了解,我需要模拟 self.client.request,这可以用请求获取或其他方式替换?
数据.py
class Post:
def __init__(self, client: HttpClient):
self.client = client
self.base_url = "https://jsonplaceholder.typicode.com"
def get_posts(self, amount):
response = self.client.request(method="GET", url=f"{self.base_url}/posts/{amount}")
if response.ok:
return response.json()
return response.status_code
现在是测试部分
test_data.py
class TestPost(unittest.TestCase):
@patch('app.client.HttpClient')
def setUp(self, module):
self.mock_http = MagicMock(autospec=HttpClient)
self.mock_post = Post(self.mock_http)
@patch.object(requests, 'get')
def test_get_posts(self, mock_data):
mock_data.return_value = {
'postId': 1,
'title': 'My title',
'description': 'Post description'
}
response = self.mock_post.get_posts(1)
assert response['postId'] == 1
当我设置mock_data.return_value 时,它实际上是否替换了response = self.mock_post.get_posts(1) 此处调用的原始响应?
也许有人可以解释一下这是如何工作的
谢谢!
【问题讨论】:
标签: python unit-testing python-unittest python-mock