【问题标题】:How To Create A Temp File Structure For Testing如何创建用于测试的临时文件结构
【发布时间】:2020-11-25 12:37:45
【问题描述】:

在单元测试和 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 图像)?

谢谢。

【问题讨论】:

    标签: django django-testing django-tests


    【解决方案1】:

    对于资源准备,您应该使用 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

    删除目录树

    【讨论】:

    • 谢谢。虽然我可能没有在上面的代码中展示这一点,但我实际上已经尝试过这样做。问题是os.makedirs 创建了 MEDIA 目录,而不是 MEDIA 文件夹中的子文件和图像文件。我还需要一个单元测试的解决方案
    • 稍后,如果我正确并完全理解您的问题,我会为您制作代码示例
    猜你喜欢
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2010-09-17
    相关资源
    最近更新 更多