如何修复Django测试用例中图片路径生成的AssertionError?
问题原因
你遇到的断言失败是因为 os.path.join() 会根据操作系统生成对应的路径分隔符(Windows下是反斜杠 \,类Unix系统下是正斜杠 /),但测试用例里硬编码了正斜杠格式的路径,导致两边格式不匹配。
解决方案
有两种简单的修复方式,任选其一即可:
方案1:让测试用例的预期路径和函数逻辑保持一致
修改测试用例,用 os.path.join() 生成预期路径,自动适配当前系统的分隔符:
@patch('core.models.uuid.uuid4') def test_recipe_file_name_uuid(self, mock_uuid): '''test generating image path''' uuid = "test-uuid" mock_uuid.return_value = uuid file_path = models.recipe_image_file_path(None, "example.jpg") # 用os.path.join构建预期路径 expected_path = os.path.join('uploads', 'recipe', f'{uuid}.jpg') self.assertEqual(file_path, expected_path)
方案2:统一函数返回的路径分隔符为正斜杠
如果希望不管什么系统都返回正斜杠格式的路径,可以修改路径生成函数,替换分隔符:
import os import uuid def recipe_image_file_path(instance, filename): '''generating a file path for the new recipe image''' ext = os.path.splitext(filename)[1] filename = f'{uuid.uuid4()}{ext}' # 替换系统分隔符为正斜杠 return os.path.join('uploads', 'recipe', filename).replace(os.sep, '/')
这样测试用例里的硬编码路径就能和函数返回值匹配。
内容的提问来源于stack exchange,提问作者Narendra yadav
相关产品推荐
相关产品推荐

