python - 这个测试有意义吗?
问题描述
我目前正在学习如何为 Django 应用程序编写测试。教程视频中的那个人为他的应用程序编写了以下测试:
def test_product_url(self):
path = reverse('product_detail')
self.assertEqual(resolve(path).view_name, 'product_detail')
我不明白这个测试有什么意义。它只是测试 django 解析功能是否正确工作?
解决方案
测试做什么
Django 提供了某些函数来从视图名称(可选地带有参数)生成 URL:reverse(..)
[Django-doc]函数。resolve(..)
此外, [Django-doc]函数则相反:它从给定的 URL 计算将调用的路径ResolverMatch
,并返回一个包含视图名称的对象,以及对函数的引用等。
如果这两个功能都正确实现了——这是我们作为开发人员无法控制的事情,因为我们使用Django(当然可以修复错误并为 Django 开发团队创建票证,但现在让我们忽略它),它看起来像如果这两个函数是彼此的“倒数”。然而,可能会有一些特殊性。
测试可能失败的情况
首先,这里的测试隐式地检查具有给定名称的视图是否存在:如果不再存在这样的视图,反向查找将失败,并引发错误。因此,该测试可确保例如不会意外地重命名视图。
它检查的另一件事是视图和 URL 之间的关系是单射的:如果有两个视图产生相同的URL,则该函数不是单射的。
例如,如果在某种意义上存在重叠路径,它们都与给定的 URL 匹配,那么resolve(..)
函数可能会指向另一个 URL:例如,如果视图名称生成一个 URL /some/url
,但该路径被之前的路径覆盖在路径列表中,则结果将具有不同的名称。
但是请注意,即使视图和 URL 之间的关系不是单射的,这仍然不意味着这会引发错误:给定的视图名称可能是第一个路径,因此该问题未被“检测到”。
不管这个测试是否打算检查这个,以一种特别的方式检查这个不是一个好主意:以防万一想要保证所有视图都有一个名称等。最好编写一个详尽的测试检查所有路径和视图名称。
推荐阅读
- python - 如何读取具有多个空格的文本文件 python/spark
- asp.net-core - 在创建页面上用组合框类型字段替换文本字段
- webserver - Esp8266 D1-Mini 网络服务器和 LED 闪光灯
- php - Woocommerce - 在初始化和注册按钮点击后加载 Jquery 函数
- java - Springboot OAuth2授权服务器刷新令牌未在数据库中创建
- arrays - 仅按行随机播放二维数组
- c++ - 如果我将迭代器存储在某处,是否可以在 O(1) 中从 std::list 插入/删除元素。迭代器是一种指针。对吧?
- c# - 无法从 BsonType 'Array' 异常中反序列化 'BsonDocument'
- sql-server - Django 无法使用多个主键修改 SQL Server 中的一行
- python - 在文件目录中搜索关键字