【发布时间】:2018-01-12 17:50:28
【问题描述】:
我试图在下面的虚拟方法中模拟一个链接的 Django 模型对象,
# utils.py
def foo_something_exist():
if Foo.objects.get(a='something').exist():
return 'exist'
# test.py
import unittest.mock import patch
import utils
.
.
.
@patch('utils.Foo')
def test_foo_something_exist_returns_none(self, mock_foo):
mock_foo.objects.get.exists.return_value = False
self.assertIsNone(utils.foo_something_exist())
.
.
.
test_foo_something_exist() 未通过测试。我发现utils.py中的Foo.objects.get(a='something').exist()是一个MagicMock对象(<MagicMock name='Member.objects.get().exists()' id='xxxxxx'>)而不是False,这导致了这个测试函数的失败。是的,我也试过mock_foo.objects.return_value.get.return_value.exists.return_value = False,在帖子中提到过。用于正确模拟模型对象(及其链式方法)的指针/提示非常感谢。
提前谢谢你。
【问题讨论】:
标签: python django python-3.x unit-testing python-3.5