这个测试有意义吗?

2024-04-26 23:24:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习如何为Django应用程序编写测试。 教程视频中的那个家伙为他的应用程序编写了以下测试:

def test_product_url(self):
    path = reverse('product_detail')
    self.assertEqual(resolve(path).view_name, 'product_detail')

我不明白这个测试有什么意义。它只是测试django resolve函数是否正常工作,对吗?你知道吗


Tags: pathdjangotestself应用程序url视频def
1条回答
网友
1楼 · 发布于 2024-04-26 23:24:35

测试的作用

Django提供了一些函数来从视图名生成URL(可以选择使用参数)^{} [Django-doc]函数。此外,^{} [Django-doc]函数实现了相反的操作:它从给定的URL计算path将调用什么,并返回一个^{}对象,该对象包含视图名称以及对函数的引用等

如果这两个函数的实现是正确的——我们作为开发人员无法控制,因为我们使用Django(当然可以修复bug并为Django开发团队创建票据,但是现在让我们忽略这一点),看起来这两个函数似乎是彼此的“相反”。不过,也可能有一些微妙之处。你知道吗

测试可能失败的情况

首先,这里的测试隐式地检查具有给定名称的视图是否存在:如果不再存在这样的视图,则反向查找将失败,并引发错误。因此,该测试可以确保一个示例不会意外地重命名视图。你知道吗

这个检查的另一件事是视图和URL之间的关系是内射的:如果有两个视图产生相同的URL,那么函数就不是内射的。你知道吗

例如,如果存在重叠的路径,即这两个路径都与给定的URL匹配,那么resolve(..)函数可能会指向另一个URL:例如,如果视图名生成了一个URL /some/url,但该路径也被路径列表中较早的路径覆盖,那么结果将有一个不同的名称。你知道吗

但是请注意,即使视图和url之间的关系不是内射的,那么这仍然不意味着这将引发错误:给定的视图名称可能是第一个路径,因此该问题没有被“检测到”。你知道吗

不管这个测试是否是为了检查这个,以一种特殊的方式检查这个不是一个好主意:如果你想保证所有视图都有一个名称等,最好编写一个测试,彻底检查所有的路径和视图名称。你知道吗

相关问题 更多 >