gpt4 book ai didi

Python 和 pytest - 模拟 db 对象

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:44 25 4
gpt4 key购买 nike

这是我第一次尝试使用模拟来模拟数据库,但无法理解它是如何工作的。

我的主文件:

 def _test( db ) :
res = {}
for x in db.getData() :
res[ x['id'] ] = x['name']
return res

这是我的测试:

def test_small() :
mock_db = mock.Mock()
mock_db.getData.return_value = [{ u'name':u'Nick',u'id':1234}]
_test( mock_db )
assert mock_db.getData.assert_called_once()

断言失败了。错误是:

assert None
E + where None = <bound method Mock.assert_called_once of <Mock name='mock.getData' id='140103447969552'>>()
E + where <bound method Mock.assert_called_once of <Mock name='mock.getData' id='140103447969552'>> = <Mock name='mock.getData' id='140103447969552'>.assert_called_once
E + where <Mock name='mock.getData' id='140103447969552'> = <Mock id='140103462485712'>.getData

有人可以解释一下我错过了什么吗?理想情况下,我想稍后添加一些断言 - _test 的结果是我的模拟的返回值。

最佳答案

assert_used_once 方法本身 already done the assertion为您服务:

def assert_called_once(_mock_self):
"""assert that the mock was called only once.
"""
self = _mock_self
if not self.call_count == 1:
msg = ("Expected '%s' to have been called once. Called %s times." %
(self._mock_name or 'mock', self.call_count))
raise AssertionError(msg)

您可以删除多余的 assert 子句:

mock_db.getData.assert_called_once()

assert mock_db.getData.call_count == 1

关于Python 和 pytest - 模拟 db 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47041498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com