【发布时间】:2020-11-01 19:30:29
【问题描述】:
我对 python 测试比较陌生。我正在使用unittest.mock 来测试 Django 视图功能。我在嘲笑一个模特。我正在使用 TDD,一旦视图层通过了所有测试,我将在模型中实现更改。
def new_list(request):
form = ItemForm(data=request.POST)
if form.is_valid():
list_ = List()
list_.owner = request.user
print(list_.owner)
list_.save()
form.save(for_list=list_)
return redirect(list_)
else:
return render(request, 'home.html', {'form': form})
测试代码如下:
@patch('lists.views.list')
@patch('lists.views.ItemForm')
def test_list_owner_is_saved_if_user_is_authenticated(
self, mockItemFormClass, mockListClass):
user = User.objects.create(email='a@b.com')
self.client.force_login(user)
self.client.post('/lists/new', data={'text': 'new item'})
mock_list = mockListClass.return_value
self.assertEqual(mock_list.owner, user)
我得到的错误如下:
FAIL: test_list_owner_is_saved_if_user_is_authenticated (lists.tests.test_views.NewListTest)
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/mock.py",
line 1204, in patched
return func(*args, **keywargs)
File "/Users/asim/python-projects/django-todo-list/superlists/lists/tests/test_views.py",
line 181, in test_list_owner_is_saved_if_user_is_authenticated
self.assertEqual(mock_list.owner, user)
AssertionError: <MagicMock name='list().owner' id='140457579271392'> != <User: User object
(a@b.com)>
我认为 Magic mock 将返回任何断言 true。任何帮助和解释将不胜感激。
【问题讨论】:
标签: python django unit-testing mocking