当前位置: 首页 > 面试题库 >

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

戴霖
2023-03-14
问题内容

是否有任何简单的机制可以覆盖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/dev/topics/testing/tools/#overriding-settings

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

这些功能在Django 1.3中尚不存在。

如果要更改所有测试的设置,则需要创建一个单独的测试设置文件,该文件可以加载和覆盖主设置文件中的设置。在其他答案中,有几种不错的方法;我看到的这两个成功的变化hspander的和德米特里的方法。



 类似资料:
  • 问题内容: 我有一个使用elasticsearch的Django应用。我想拥有100%的代码测试覆盖率,因此我需要测试对Elasticsearch(本地“安装”)的API调用。 所以我的问题是:模拟整个elasticsearch更好还是应该运行elasticserver并检查结果? IMO最好模拟elasticsearch并仅检查python代码(测试是否使用正确的参数调用了所有内容)。 问题答案

  • 问题内容: 在我的django应用程序中,我有一个完成文件上传的视图。核心代码段是这样的 我想对视图进行单元测试。我正计划测试快乐路径和失败路径。即,没有键“ file”的情况,有键“。”的情况。 如何设置幸福道路的发车数据?有人可以告诉我吗? 问题答案: 来自Django文档: 提交文件是一种特殊情况。要发布文件,只需提供文件字段名称作为键,并提供要上传的文件的文件句柄作为值。例如:

  • 单元测试,对独立的代码功能片段,由编写代码的团队进行测试,也是一种编码,而非与之不同的一些事情。设计代码的一部分就是设计它该如何被测试。你应该写一个测试计划,即使它只是一句话。有时候测试很简单:“这个按钮看起来好吗?”,有时候它很复杂:“这个匹配算法可以精确地返回正确的匹配结果?”。 无论任何可能的时候,使用断言检查以及测试驱动。这不仅能尽早发现 bug,而且在之后也很有用,让你在其他方面担心的谜

  • 这是我的控制器: 如你所见,我有两个依赖项,一个和一个 这是我的测试类,我使用xUnit进行测试,使用Moq创建mock和stub,我可以轻松地模拟,但使用我不知道该怎么做,所以在运行测试时,我只传递null并注释掉登录控制器的调用。有没有一种方法可以进行测试,但仍然以某种方式保留记录器?

  • 我正在尝试用liquibase为一些测试设置数据库模式和一些测试数据。每个测试都有一个单独的changelog,它为测试设置模式和一些特定的数据。 为了使我的测试工作,我需要在每次测试之前删除模式,并用新的测试数据填充它。然而,这似乎并不奏效,因为有些测试正在失败,因为旧的测试数据仍然可用。我觉得我的配置有些东西不对。如何在每次测试之前强制liquibase删除模式?

  • 问题内容: 我是Java和junit的新手。我有以下要测试的代码。如果您能提出有关测试它的最佳方法的想法,将不胜感激。 基本上,以下代码与从集群中选出领导者有关。领导者在共享缓存上持有锁,并且如果领导者以某种方式释放了对缓存的锁定,则领导者的服务将恢复并处置。 我如何确保领导者/线程仍保持对缓存的锁定,并且在执行第一个线程时另一个线程无法恢复其服务? 问题答案: 作为测试框架的替代方法(或使用JU