有什么简单的机制可以覆盖单元测试的Django设置吗?我的一个模型上有一个管理器,它返回特定数量的最新对象.它返回的对象数由NUM_LATEST设置定义.

如果有人改变设置,这可能会让我的测试失败.如何覆盖setUp()上的设置,然后在tearDown()上恢复它们?如果这是不可能的,有没有什么方法可以让我对方法进行修补或模拟设置?

EDIT:这是我的经理代码:

class LatestManager(models.Manager):
    """
    Returns a specific number of the most recent public Articles as defined by 
    the NEWS_LATEST_MAX setting.
    """
    def get_query_set(self):
        num_latest = getattr(settings, 'NEWS_NUM_LATEST', 10)
        return super(LatestManager, self).get_query_set().filter(is_public=True)[:num_latest]

经理使用settings.NEWS_LATEST_MAX来分割查询集.getattr()仅用于在设置不存在时提供默认值.

推荐答案

编辑:如果您要更改smallspecific个测试的设置,则此答案适用.

从Django 1.4开始,有多种方法可以在测试期间覆盖设置: https://docs.djangoproject.com/en/stable/topics/testing/tools/#overriding-settings

TestCase将有一个self.settings上下文管理器,并且还将有一个@override_settings修饰器,它可以应用于测试方法或整个TestCase子类.

这些特性在Django 1.3中还不存在.

如果要更改all个测试的设置,则需要为测试创建一个单独的设置文件,该文件可以加载和覆盖主设置文件中的设置.在其他答案中有几种很好的方法;我已经看到hspander'sdmitrii's方法的成功变体.

Django相关问答推荐

在生成的表单元素处出现多值DictKeyError

基于Django类的视图:除非登录,否则拒绝访问future 日期

当前路径 **/POST 与其中任何一个都不匹配

测试 - 两个类共享相同的登录代码,但它只能在一个类中工作

使用OuterRef过滤器获取Django记录的最大值

Django 关系嵌套related_name

Django:获取每组最新的N条记录

Django获取具有值的相关对象的计数并将其添加到注释中

如何根据反向外键相关模型的字段过滤 QuerySet?

django - 让用户登录到测试客户端

djangorestframework:过滤相关字段

InvalidBasesError:无法解析 [] 的基础

__init__() 得到了一个意外的关键字参数user

如何创建一个在复选框右侧显示复选框标签的 Django 表单?

Django 不调用模型清理方法

无效的块标签: static

如何在 django 元素中开始做 TDD?

在 Django 开发服务器中关闭静态文件的缓存

Django:AppRegistryNotReady()

如何使用 Django/nginx 部署仅限 HTTPS 的站点?