【发布时间】:2013-08-29 10:55:09
【问题描述】:
我有两个模块。
a.py
def get_resource(arg1, arg2):
return Modelobject based on arg1 and arg2 or None
b.py(形式)
from a import get_resource
class A(forms.Form):
arg1 = forms.CharField()
arg2 = forms.CharField()
def clean(self):
res = get_resource(arg1, arg2)
if res is None:
validationerror
else:
cleaned_data.update(res_key=res)
现在我需要模拟 get_resource 部分,这样我就不需要任何数据库,但我无法让它工作。
这是我尝试过的,但它不起作用。我做错了什么?
class Test(TestCase):
def test_form_a(self):
with patch('b.get_resource') as mock_tool:
mock_tool.return_value = MagicMock(spec=MusicModel)
form_data = {'arg1': '1', 'arg2': 'Music'}
form = A(data=form_data)
我还用函数尝试了 side_effects
def my_side_effect(*args, **kwargs):
return value based on arg[0] and arg[1]
mock_tool.side_effect = my_side_effect
由于我在模拟和测试方面相当新手,谁能告诉我正确的方向吗?
【问题讨论】:
-
为什么,特别是,您要模拟它以便不需要数据库?我意识到在“纯”单元测试中会出现这种情况,但是 Django 的单元测试环境包括设置一个测试数据库,这样您就不必担心这类事情。
-
好吧,我刚刚开始测试和其他东西。而且由于我只想检查表单的 clean 方法的覆盖,我想看看是否可以在不接触数据库的情况下完成它。我想如果我接触数据库并创建固定装置,那么所有这些都不会是单元测试。
标签: python django unit-testing mocking