Django单元测试在整个项目范围内失败但通过了应用范围

时间:2012-11-13 17:45:34

标签: django unit-testing python-unittest django-unittest

我在Ubuntu 12.10上使用Django 1.4和Python 2.7。

我有一个包含多个应用程序和几十个单元测试的项目。我们最近使用@override_settings装饰器遇到了一个小问题。

以下是一些代码:

@override_settings(MEDIA_URL='/test/media/')
    def test_get_content_dict(self):
        self.assertEqual(
                self.offer.get_content_dict(),
                { 'some stuff': some stuff }

在应用程序级别运行测试时,一切都会过去。

python manage.py test my_app --settings=proton.settings.test

但是当我们在项目级别运行时,它会失败。

python manage.py test --settings=proton.settings.test

由于some stuff使用/test/media而模型方法offer.get_contect_dict()使用/media,这是我们的实际MEDIA_URL,因此失败。

我们可以更改MEDIA_URL文件中的settings/test.py,但这需要所有测试都使用/test/media(无论如何这可能是一个好主意)。

显然问题出在Django的core.files.storage.FileSystemStorage.__init__()中 - 它在测试套件中设置了base_url,但在每次测试后都没有重新实例化对象(原因很明显),所以{{1}实际上并没有做任何事情。

这是一个错误还是按预期工作?除了通过在@override_settings/test/media中设置MEDIA_URL常量来强制所有单元测试使用settings/test.py之外,对优雅解决方案的任何建议除外吗?

0 个答案:

没有答案