Hou*_*man 5 python pytest fastapi python-3.9
我有一个名为database.py 的类,其中包含一个名为generate_token() 的函数。我想模拟它并返回一个固定值321。这样我就可以看到该方法被调用并返回了返回值。
我该如何嘲笑呢?这是我尝试过的。
@pytest.mark.asyncio
async def test_successful_register_returns_device_token(monkeypatch):
async def mock_generate_token():
return "321"
m = AsyncMock(mock_generate_token)
m.return_value = "321"
async with AsyncClient(app=app, base_url="http://127.0.0.1") as ac:
monkeypatch.setattr(database, "generate_token", m)
response = await ac.post(
"/register/",
headers={},
json={},
)
assert response.status_code == 201
assert "device_token" in response.json()
assert response.json()["device_token"] == "321"
Run Code Online (Sandbox Code Playgroud)
它实际上比我想象的要简单得多,一个普通的@patchfrom unittest.mock import patch就足够了。它识别异步方法并自动注入 AsyncMock。
@pytest.mark.asyncio
@patch("service.auth_service.AuthService.generate_token")
async def test_successful_register_returns_device_token(self, mock_token):
mock_token.return_value = "321"
async with AsyncClient(app=app, base_url="http://testserver") as ac:
response = await ac.post(
"/register/",
headers={},
json={},
)
assert response.status_code == 201
assert "device_token" in response.json()
assert response.json()["device_token"] == "321"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6341 次 |
| 最近记录: |