【问题标题】:How are my tests not affecting the database...?我的测试如何不影响数据库...?
【发布时间】:2013-06-28 16:12:40
【问题描述】:

我最近从使用常规旧测试切换到使用 WebTest 和这个“No Database Test Runner”

from django.test.simple import DjangoTestSuiteRunner

class NoTestDbDatabaseTestRunner(DjangoTestSuiteRunner):
    def setup_databases(self, **kwargs):
        pass

    def teardown_databases(self, old_config, **kwargs):
        pass

这是一个必须以某种方式访问​​数据库的示例测试...

发生了什么?我的测试是否命中数据库但回滚到某个旧状态?测试到测试我可以看到每个创建的列表都有一个递增的 id。

    def test_image_upload(self):
        form_data = self.listing_form_defaults.copy()
        form_data['images-TOTAL_FORMS'] = '3'

        upload_files = [
            ('images-0-image', 'testdata/1.png'),
            ('images-1-image', 'testdata/2.png'),
            ('images-2-image', 'testdata/3.png'),
        ]

        form_resp = self.app.post(
            reverse('listing_create'),
            form_data,
            upload_files=upload_files,
            user='kmike'
        ).follow()

        assert len(form_resp.context['listing'].images.all()) == 3

form_resp.context['listing'].images.all() 必须访问数据库,我 print'd 了它,它有来自我的数据库的数据库记录。

我只是感到困惑——我的测试运行得非常快,而且似乎并没有真正改变我的数据库,这是如何工作/发生的?!

【问题讨论】:

  • django 是开源的。深入研究代码,我敢打赌这很明显。
  • 代码的哪一部分............?

标签: database django webtest


【解决方案1】:

需要数据库的测试(即模型测试)不会使用您的“真实”(生产)数据库。为测试创建单独的空白数据库。

Here

【讨论】:

  • 没有创建测试数据库。我的测试大约需要 1 秒,而过去需要 2 分钟以上!
猜你喜欢
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
相关资源
最近更新 更多