我想知道对Django视图进行单元测试的正确方法是什么,例如:
class UserListView(LoginRequiredMixin, ListView):
model = get_user_model()
template_name = 'users/user_list.html'
ordering = 'last_name'
def get_queryset(self):
self.queryset = self.model.objects.all().annotate(
full_name=Concat('first_name', Value(' '), 'last_name')
)
return super().get_queryset()
我目前正在对get_queryset
方法进行单元测试。这让我100%覆盖了这个视图,但是我是否还要测试单元测试中的默认排序?或者应该仅在集成/系统测试中进行测试(例如使用Selenium或Django的客户端)?
一方面,ordering
属性是视图的一部分,它会影响它的行为,另一方面,它仅被第三方代码使用。
答案 0 :(得分:1)
在我看来,是的,你应该为此添加一个测试。一方面,你可以打赌,Django已经有一个测试,以确保这个属性像宣传的那样工作(Django有非常好的测试覆盖率)。
但是,我的推理是这样的:假设上游ListView
决定将该属性的名称更改为其他名称。比如,他们将其重命名为list_ordering
。
快进7个月之后,你会碰到Django的版本号以尝试一些闪亮的新功能。写UserListView
现在是一段遥远的记忆。作为开发人员,您想知道您要求的默认顺序已停止在较新版本的Django中工作,并且此处的失败测试将向您显示 - 它会引起您现在需要更新的代码区域的注意。 / p>
当然,我们应该在升级第三方库时仔细阅读发行说明,但最好还是直接与您交流测试!