1

我已经开始阅读有关模拟库的信息,但还没有完全弄清楚如何将它用作输入值来测试我的同步功能。

我的同步函数从外部源获取多维字典,然后对其进行解析并转换为各种 Django 数据库记录

我勇敢地尝试过:

sync(MagicMock()) 

但由于模拟返回的值的类型,肯定会直接失败。

所以我认为我最好手动设置一些返回值,我尝试了以下实验:

>>> m = MagicMock()
>>> m['categories'] = [1,2,3]
>>> m['categories'].__class__
<class 'mock.MagicMock'>
>>> m['categories'][0]
<MagicMock name='mock.__getitem__().__getitem__()' id='4557691280'>

还尝试了 return_value

>>> m = MagicMock()
>>> m['categories'].return_value = [1,2]
>>> m['categories']
<MagicMock name='mock.__getitem__()' id='4557733712'>

但是同步函数中的代码需要字典中的整数值......

4

2 回答 2

0

你可以用patch.dict做到这一点:

from mock import patch

m = dict()

with patch.dict(m, {'categories': [1, 2, 3]}):
    print(m['categories'])

print(m)
于 2014-03-27T21:45:45.117 回答
0

您可以使用PropertyMock做到这一点:

>>> m = MagicMock()
>>> p = PropertyMock(return_value=3)
>>> type(m).foo = p
>>> m.foo
3
于 2014-03-27T21:50:47.237 回答