gpt4 book ai didi

django - 如何在 Django 中使用不同的设置进行单元测试?

转载 作者:行者123 更新时间:2023-11-28 19:32:36 25 4
gpt4 key购买 nike

是否有任何简单的机制可以覆盖单元测试的 Django 设置?我的一个模型有一个经理,它返回特定数量的最新对象。它返回的对象数由 NUM_LATEST 设置定义。

如果有人更改设置,这有可能使我的测试失败。如何覆盖 setUp() 上的设置并随后在 tearDown() 上恢复它们​​?如果那不可能,有什么方法可以猴子修补方法或模拟设置吗?

编辑:这是我的经理代码:

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() 仅用于在设置不存在时提供默认值。

最佳答案

编辑:如果您想更改数量的特定测试的设置,则此答案适用。

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

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

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

如果您想更改所有 测试的设置,您需要为测试创建一个单独的设置文件,它可以加载和覆盖主设置文件中的设置。在其他答案中有几种很好的方法;我在 hspander's 上都看到了成功的变化和 dmitrii's方法。

关于django - 如何在 Django 中使用不同的设置进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/913549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com