django - 如何创建用于测试的临时文件结构
问题描述
在单元测试和 Selenium 功能测试文件期间,会生成之后不会清理的文件。我花了很长时间试图让django-cleanup工作,但它什么也没做。
我想我需要创建一个临时文件结构,文件可以在测试期间上传到然后销毁。这就是我创建临时 MEDIA_ROOT 文件的方式:
MEDIA_ROOT = tempfile.mkdtemp()
@override_settings(MEDIA_ROOT=MEDIA_ROOT)
class UnitTest(TestCase):
@classmethod
def tearDownClass(cls):
shutil.rmtree(MEDIA_ROOT, ignore_errors=True)
super().tearDownClass()
问题是,虽然我可能创建了一个临时 MEDIA_ROOT 文件夹,但它并没有创建子文件夹和文件。
我的项目中的文件结构如下所示
MEDIA_ROOT
profile_pics
default.jpg
user_files
在执行每个测试之前,会创建一个用户,并在创建用户期间为用户分配一个配置文件图片“default.jpg”。这会使每个测试崩溃,因为 profile_pics 文件夹和 default.jpg 图像都不存在。如果它没有在这里崩溃,它会在稍后崩溃,因为它会尝试将文件保存在位于 MEDIA 内的文件夹中,这些文件夹在我的临时文件中不存在。
如何在不使用 Django Cleanup 的情况下在测试后删除所有文件?或者我如何创建一个临时媒体文件(类似于我已经在做的),以及其中的文件结构(它还必须包含用户创建过程中需要的 default.jpg 图像)?
谢谢你。
解决方案
对于资源准备,您应该使用 setup 和 tearDown 方法
class MyViewSetTestCase(TestCase):
def setUp(self):
# do directory & files creation here
pass
def tearDown(self):
# do cleanup (remove all dirs & files) here
pass
每次测试前调用 setUp 并在每次测试后调用 tearDown
您可以使用os.makedirs创建目录树
您可以使用shutil.rmtree删除目录树
推荐阅读
- json - How to parse empty [] using spray.json
- c# - 无法在 .net core 2.0 中使用创建的用户登录
- java - Bcrypt 哈希公用部分
- html - seems `border-box` not working with inline-block of `a` tag
- r - How to refer to an object inside a function in R?
- javascript - Getting the result of an if else statement out of scope in Javascript
- swift - AdMob 广告未展示
- php - MYSQL 中时间戳更新的奇怪问题
- php - How to post to different categories in wordpress using a custom php script
- r - 如何在箱线图中添加线条和文本?