提供在运行测试时重写django设置的方法

django-override-settings的Python项目详细描述


django覆盖设置提供了一种在 Django测试。

override_settings类可以用作类或 方法decorator或作为上下文管理器临时重写 设置值。在每个测试用例完成后(使用它时 作为装饰器)或在上下文管理器退出之后,它重置 django.conf.settings中的值与以前的值相同。这样可以防止 悄悄进入并让每个测试用例在自己的环境中运行的副作用 沙箱。

这个包还提供了两个方便的函数(^{tt3})$ 以及without_apps)来修改INSTALLED_APPS以及 特殊对象(SETTING_DELETED)在没有给定对象的情况下运行测试 设置已定义。

当 django 1.4已经发布,因为它将带有一个内置的 override_settings。但对于那些保持1.4之前的代码库的人来说, 希望这个包裹能派上用场。

安装

我们在PyPI

pip install django-override-settings

用法

如果您有一系列需要给定设置的测试,则可以 修饰类,每个测试用例都将使用该值。为了 示例:

from django.conf import settings
from django.test import TestCase
from override_settings import override_settings

@override_settings(FOO="abc")
class TestFoo(TestCase):
    def test_foo(self):
        self.assertEqual(settings.FOO, "abc")

或者你可以装饰一个单独的测试用例,并让它只应用于 方法:

@override_settings(BAR="123")
class TestBar(TestCase):

    @override_settings(BAR="abc")
    def test_bar(self):
        self.assertEqual(settings.BAR, "abc")

    def test_bar_no_decoration(self):
        self.assertEqual(settings.BAR, "123")

您也可以将其用作上下文管理器:

class TestBar(TestCase):
    @override_settings(BAR="123")
    def test_bar(self):
        self.assertEqual(settings.BAR, "123")

        with override_settings(BAR="abc")
            self.assertEqual(settings.BAR, "abc")

        self.assertEqual(settings.BAR, "123")

要仅修改INSTALLED_APPS,请使用with_appswithout_apps

from override_settings import with_apps, without_apps

class TestAppModifiers(TestCase):
    @with_apps('django.contrib.humanize')
    def test_humanize(self):
        # ...

    @without_apps('django.contrib.sites')
    def test_no_sites(self):
        # ...

要在没有设置的情况下运行测试,请使用SETTING_DELETED

from override_settings import override_settings, SETTING_DELETED

class TestMissingSetting(TestCase):
    @override_settings(CUSTOM_OPTION=SETTING_DELETED)
    def test_delete_custom_option(self):
        """
        Useful to make sure a missing setting raises an Exception.
        """
        self.assertRaises(AttributeError, getattr, settings, 'CUSTOM_OPTION')

要求

  • django>;=1.2

谢谢

联系人

如果你发现任何错误,请open a ticket

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用McClickListener单击了什么元素   Java时间戳在Oracle时间戳中不同情况下存储12 PM的奇怪行为   java无法使用事件总线对运行在不同机器上的垂直体进行通信   java Mockserver:收到请求后进行回调   java无法将Json字符串转换为Map<string,Object>   java如何按升序排列输出?   java视图行,带有oracle键。jbo。在SrCategoryParentIterator中找不到键[300100120394155]   javafxmysql连接示例   java正在等待加载完成   java是否可以将同一个有状态会话bean实例注入多个其他会话bean?   java无法让万向节检测离开或进入区域   使用JavaCV和OpenCV的java提供了dyld:lazy符号绑定失败:找不到符号:__sincos_stret   xml解析无法使用Java读取xml文档   java无法更改工具栏的颜色   javaapachesshd和JSCH   java无法在firebase存储中检索图像url   java问题与executeUpdate   同一应用程序中不同活动之间的java SharedReference