Django测试显示断言:错误,即使断言为真

Django测试显示断言:错误,即使断言为真,django,django-testing,Django,Django Testing,这可能不是最好的方法,因为我正在学习如何使用Django进行测试,但当我尝试测试包含表单的视图时,我得到: AssertionError: <User[37 chars], fields=(email;first_name;last_name;role;password1;password2)> != <User[37 chars], fields=(email;first_name;last_name;role;password1;password2)> 有人认为:

这可能不是最好的方法,因为我正在学习如何使用Django进行测试,但当我尝试测试包含表单的视图时,我得到:

AssertionError: <User[37 chars], fields=(email;first_name;last_name;role;password1;password2)> != <User[37
chars], fields=(email;first_name;last_name;role;password1;password2)>
有人认为:

def signup(request):
    form = UserCreationForm()
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, f'Good news {form.cleaned_data["first_name"]}, you have successfully signed up.')
            return redirect(home)
    template_name = 'signup.html'
    context = {
        'form': form,
    }
    return render(request, template_name, context)
现在,如您所见,我正在打印两个表单(一个是响应上下文,一个是我请求的空表单)

我认为您不需要查看来自模型和表单的代码,因为错误消息非常明确,即使我看不到错误

另外,我检查了Diffchecker上的两个打印语句(HTMLs),它说这两个文件是相同的

那怎么会有错误呢

显然,如果你需要更多的代码,我会发布它


谢谢

问题是您正在比较同一对象的两个不同实例。有关更多详细信息,请参阅。

在这一行之前
self.assertEqual(response.context['form'],form)
执行以下操作:
print(“form:{}.format.”form(form.\uu dict)
print(“response form:{}.form.”form(response.context['form'])
这将准确地向您显示这些文件中的内容objects@COB谢谢,它看起来像是“\u绑定\u字段\u缓存”字段(我不知道从哪里来),是“Form”中的一个空字典,但它是在“Response Form”中填充的。您知道我应该怎么做吗?@COB另外,所有对象都有不同的“at”值。@COB可能是因为我必须使用另一个断言吗?我尝试了assertContains,但我不确定是否以正确的方式使用它(self.assertContains(Response,Form,html=True))通过执行EQ,它现在显示的是有效的=未知的,而它应该是假的。我想我可以考虑这个问题的答案。你只关心字段是相等的,虽然是正确的?所以只比较它们,而不是整个对象。
def signup(request):
    form = UserCreationForm()
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, f'Good news {form.cleaned_data["first_name"]}, you have successfully signed up.')
            return redirect(home)
    template_name = 'signup.html'
    context = {
        'form': form,
    }
    return render(request, template_name, context)