Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 这个测试有意义吗?_Python_Django_Testing - Fatal编程技术网

Python 这个测试有意义吗?

Python 这个测试有意义吗?,python,django,testing,Python,Django,Testing,我目前正在学习如何为Django应用程序编写测试。 教程视频中的家伙为他的应用程序编写了以下测试: def test_product_url(self): path = reverse('product_detail') self.assertEqual(resolve(path).view_name, 'product_detail') 我不明白这个测试有什么意义。它只是测试django resolve函数是否正常工作?测试的作用 Django提供了某些函数来从视图名称生成U

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

def test_product_url(self):
    path = reverse('product_detail')
    self.assertEqual(resolve(path).view_name, 'product_detail')
我不明白这个测试有什么意义。它只是测试django resolve函数是否正常工作?

测试的作用 Django提供了某些函数来从视图名称生成URL(可以选择使用参数):函数。此外,函数的作用正好相反:它根据给定的URL计算将调用的路径,并返回一个包含视图名称以及对函数的引用等的对象

如果这两个函数实现正确——这是我们作为开发人员无法控制的,因为我们使用Django(当然,我们可以修复bug并为Django开发团队创建票据,但现在让我们忽略这一点),这两个函数看起来好像是彼此的“反向”。然而,可能存在一些细节

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

检查的另一件事是视图和URL之间的关系是内射的:如果有两个视图生成相同的URL,那么函数不是内射的

例如,如果存在重叠路径,即这两个路径都与给定的URL匹配,则
解析(..)
函数可能会指向另一个URL:例如,如果视图名称生成URL
/some/URL
,但该路径也被路径列表中前面的路径覆盖,然后结果将具有不同的名称

但是请注意,即使视图和URL之间的关系不是内射的,这也并不意味着这将引发错误:给定的视图名称可能是第一条路径,因此该问题没有被“检测到”


无论此测试是否旨在检查这一点,以一种特别的方式检查这一点都不是一个好主意:如果希望确保所有视图都有一个名称等。最好编写一个测试,彻底检查所有路径和视图名称。

在我看来,他/她正在测试Django工具。尽管这样做没有问题,但如果出现问题(除非您开始修补Django的代码,否则您对此无能为力)。@WillemVanOnsem这有用吗?Django对这些函数没有自己的测试吗?根据开发人员编写的代码,如果有多个视图名称映射到同一个URL,反之亦然,则会出现这种情况的唯一原因是:您应该签出codereview@Stanley可能吧,但不是为了这个问题。