如何在Django中适当地测试ModelForms和视图

use*_*459 2 django unit-testing

是否需要为以下内容创建测试ModelForm?原因是实际上没有代码.

class HouseForm(forms.ModelForm):
    class Meta:
        model = House
        exclude = ['user',]
        fields = ['area', 'num_floors',]
Run Code Online (Sandbox Code Playgroud)

所以测试的唯一部分就是检查excludeinclude字段是否没有公共字段.还要测试它,excludeinclude确实拥有模型的所有字段,而不是更多.

是否有意义?

另一方面,我想为以下视图编写单元测试.它利用上面的ModelForm.

是否有可能在不使用Selenium等某些工具的情况下编写真正的单元测试?关键是我不知道如何在视图上传递一些字段值.

@login_required
def update_or_create_house(request, house_id=None):

    if house_id:
        house = request.user.house_set.get(pk=house_id)
    else:
        house = None

    if request.method=="POST":
        form = HouseForm(request.POST, instance=house)
        if form.is_valid():
            result = form.save(commit=False)
            result.user = request.user
            result.save()

            return redirect('houses-viewall')
        else:
            print form.errors
    else:
        form = HouseForm(instance=house)

    return render(request, 'housemgm/edit_house.html', {'form':form, 'house':house,})
Run Code Online (Sandbox Code Playgroud)

最后一个问题:在同一视图中编辑和创建功能是一个好的设计吗?或者我应该将它们分成两部分?

只是为了完整性,模型是

class House(models.Model):
    area = models.FloatField()
    owner = models.ForeignKey(User)
    num_floors = models.IntegerField(default=1)
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 6

首先,不要测试Django本身提供的东西.如果您的模型表单中没有任何自定义代码,请不要对其进行专门测试:模型表单的功能通常已经过Django的测试.

要测试您的视图,您可以使用内置的测试客户端来模拟视图上的GET和POST.然后,您可以对响应的内容以及测试之前和之后的数据库状态进行断言.

最后,是的,这是一个很好的模式.