在 Django 中为包含 os.remove 的视图编写测试
Write test for views containing os.remove in django
我在 django 中有一个基于函数的视图函数,它从模型接收 ID,检索文件地址并使用 os.remove
删除它
image = Images.objects.get(id=image_id)
os.remove(image.file)
image_id 有效并且是我的装置的一部分。
为此视图编写测试的最佳方式是什么,而无需在我每次测试代码时手动创建文件?
有没有办法更改 os.remove 函数的行为以进行测试?
是的。它叫做 mocking,有一个 Python 库:mock。 Mock 在标准库中作为早期版本的 unittest.mock
for Python 3.3+, or standalone 可用。
所以你会这样做:
from mock import patch
...
@patch('mymodel_module.os.remove')
def test_my_method(self, mocked_remove):
call_my_model_method()
self.assertTrue(mocked_remove.called)
(其中 mymodel_module
是定义模型的 models.py,并且可能导入 os
。)
我在 django 中有一个基于函数的视图函数,它从模型接收 ID,检索文件地址并使用 os.remove
删除它image = Images.objects.get(id=image_id)
os.remove(image.file)
image_id 有效并且是我的装置的一部分。
为此视图编写测试的最佳方式是什么,而无需在我每次测试代码时手动创建文件?
有没有办法更改 os.remove 函数的行为以进行测试?
是的。它叫做 mocking,有一个 Python 库:mock。 Mock 在标准库中作为早期版本的 unittest.mock
for Python 3.3+, or standalone 可用。
所以你会这样做:
from mock import patch
...
@patch('mymodel_module.os.remove')
def test_my_method(self, mocked_remove):
call_my_model_method()
self.assertTrue(mocked_remove.called)
(其中 mymodel_module
是定义模型的 models.py,并且可能导入 os
。)