Django单元测试的坑

本文讲述了在Django5.0环境下使用PyCharm进行单元测试时遇到的问题,包括`extra_tests`参数的弃用以及测试过程中对生产数据库的影响。提供了降级版本和使用命令行测试的解决方案。
摘要由CSDN通过智能技术生成

Django单元测试的坑

坑一

环境:Django5.0 +python3.10 +Pycharm2023
问题:在Pycharm自带的manage工具中执行test单元测试报错

 return super(DjangoTeamcityTestRunner, self).run_tests(test_labels, extra_tests, **kwargs) TypeError: DiscoverRunner.run_tests() takes 2 positional arguments but 3 were given

原因
Django 在 Django 5.0 中删除了参数extra_tests并且PyCharm的测试运行程序仍然提供它。
参见 django 的发行说明

DiscoverRunner.build_suite() 和 DiscoverRunner.run_tests() 的 extra_tests 参数已删除。

存在与此弃用相关的 Pycharm 问题,请参阅 PY-53355

解决
1.您可以降级到 django 4.2,直到此问题得到解决。
2.也可以在终端中执行命令python manage.py test

参考:Django 测试视图 - 出现错误 - DiscoverRunner.run_tests() 需要 2 个位置参数,但给出了 3 个 - python - SO中文参考 - www.soinside.com

坑二

Django每次运行单元测试时,都会临时新建一个数据库,首先是执行Setup方法,有多少个测试方法就执行多少次Setup方法进行初始化数据。执行完之后,就会把刚才的数据全部清空。这看着是一个优点,测试不影响实际数据库中的数据,但是如果Settiing文件中设置的测试数据库名与生产环境的数据库名一样(如下所示)并且执行的时候没有 - -keepdb 参数 ,单元测试执行完后,就会把生产环境中的数据库删除!!!

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',  # 数据库名
        'USER': 'root',  # 用户
        'PASSWORD': 'root',  # 密码
        'HOST': '127.0.0.1',  # 地址
        'PORT': '3306',  # 端口
        'TEST': {		# 测试数据库配置
             'NAME': 'test',
         }
    },
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Django是一个流行的Python Web框架,它提供了一套完整的开发工具和功能,包括单元测试单元测试是一种软件测试方法,用于验证代码的各个单元(函数、方法、等)是否按照预期工作。 在Django中,你可以使用内置的测试框架来编写和运行单元测试。以下是关于Django单元测试的一些介绍: 1. 测试文件位置:通常,你可以在每个应用程序的tests.py文件中编写单元测试代码。这样可以将测试代码与应用程序代码分开,并且可以轻松地运行和管理测试。 2. 测试和方法:你可以创建一个继承自django.test.TestCase的测试,并在其中定义各种测试方法。每个测试方法应该以test_开头,并且可以使用各种断言方法来验证预期结果。 3. 测试数据库Django提供了一个特殊的测试数据库,用于在每次运行测试时进行数据隔离。这意味着你可以在测试中创建、修改和删除数据,而不会影响到开发或生产数据库。 4. 测试客户端:Django提供了一个测试客户端,用于模拟HTTP请求和响应。你可以使用该客户端来测试视图函数、URL路由和模板渲染等功能。 5. 运行测试:你可以使用Django的manage.py命令来运行单元测试。例如,可以使用"python manage.py test"命令来运行所有应用程序的测试,或者使用"python manage.py test app_name"命令来运行特定应用程序的测试。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值