我有以下项目结构:
tests/
└── messenger/
└── messaging_test.py
app/
├── __init__.py
├── models.py
└── messenger/
├── __init__.py
└── messaging.py
在messaging.py
模块内部有一个send_schedule
带有以下几行的函数:
talks = models.Talk.query.all()
raise ValueError(str(talks)) # the debug output
我正在尝试修补models.Talk.query.all()
通话。里面messaging_test.py
有以下测试:
@patch('app.models.Talk.query.all')
def test_send_schedule(self, all_query_mock):
all_query_mock.return_value = []
for talk_id in range(1, 6):
talk_mock = MagicMock(id=talk_id, title=str(talk_id), speaker_facebook_id=1)
all_query_mock.return_value.append(talk_mock)
with vcr.use_cassette('vcr_cassettes/send_schedule.yaml'):
response = messaging.send_schedule(self.access_token, self.user_id)
self.assertTrue('recipient_id' in response)
self.assertTrue('message_id' in response)
self.assertEqual(response['recipient_id'], self.user_id)
当我使用python3 -m pytest tests/messenger/messaging_test.py
命令运行测试时,ValueError
输出一个空列表,这表示调用没有被修补。你能建议解决这个问题吗?
我做了什么来解决这个问题:
- 阅读文档的“修补位置”段落。这让我怀疑
pytest
以一种奇怪的方式运行我的测试。 - 尝试使用
pytest-mock
但未能弄清楚如何将其与unittest.TestCase
.