提供在运行测试时重写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第三方库


热门话题
在IE10中重新加载另一个帧时,internet explorer Java小程序失败/消失   ThreadLocal变量的java性能   java系统。出来println不是打印输出   java从JAXB类获取元素属性   java组织。天啊。科尔巴。包裹。InvalidName:IDL:omg。org/CORBA/ORB/InvalidName:1.0   java有没有办法让非事务连接抛出异常?   java是否有任何方法可以使用JdbcTemplate和查询/条件Fluent API   javajpa级联类型。刷新不工作?   未考虑java Maven依赖关系管理   java MySQL MBR包含抛出MySQLExceptionError的语句   java验证整数并将其设为5位数   java发现了循环依赖的问题   java Hibernate left join fetch到使用@ManyToMany关联映射的softdeleted实体生成无效查询?   JavaH:commandButton多个操作:下载文件并呈现ajax表   Google Contacts API在Java、C#、Python或Ruby中是否有一个Hello World示例?