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

Django:如何动态创建仅用于测试的模型

林星阑
2023-03-14
问题内容

我有一个Django应用,该应用需要settings以下形式的属性:

RELATED_MODELS = ('appname1.modelname1.attribute1',
                  'appname1.modelname2.attribute2', 
                  'appname2.modelname3.attribute3', ...)

然后钩住它们的post_save信号,以根据attributeN定义更新其他固定模型。

我想测试这种行为,即使该应用程序是项目中的唯一应用程序,测试也应该可以进行(除了它自己的依赖项之外,不需要安装其他包装器应用程序)。如何仅为测试数据库创建和附加/注册/激活模拟模型?(或者有可能吗?)

允许我使用测试治具的解决方案会很棒。


问题答案:

你可以将测试放在tests/应用程序的子目录(而不是tests.py文件)中,并tests/models.py在仅测试模型中包含。

然后提供一个测试运行脚本(示例),其中包含你的tests/“ app” INSTALLED_APPS。(在实际项目中运行应用程序测试时,这是行不通的,因为真实项目中没有测试应用程序INSTALLED_APPS,但是我很少发现从项目中运行可重用的应用程序测试很有用,并且Django 1.6+默认情况下没有。 )

(注意:如果你的测试用例子类TransactionTestCase会大大降低测试速度,并且仅在Django 1.7+中不再起作用,则下面描述的替代动态方法仅在Django 1.1+中有效,而在Django 1.7+中则不再适用。用它。)

在测试开始时(即在setUp方法中,或在一组doctests的开始处),可以动态地添加"myapp.tests"到INSTALLED_APPS设置中,然后执行以下操作:

from django.core.management import call_command
from django.db.models import loading
loading.cache.loaded = False
call_command('syncdb', verbosity=0)

然后,在测试结束时,应通过还原旧版本的INSTALLED_APPS并再次清除应用程序缓存来进行清理。



 类似资料:
  • 问题内容: 这是有关django的问题。我有一个模特说“汽车”。这将具有一些基本字段,例如“颜色”,“车辆所有者名称”,“车辆成本”。 我想提供一个表格,用户可以根据他要添加的汽车添加额外的字段。例如,如果用户添加“汽车”,则他将在运行时动态地在表单中添加其他字段,例如“汽车里程”,“校准制造商”。假设用户想要添加“卡车”,他将添加“可以运载的货物”,“许可证”等。 如何在Django中实现这一目

  • 问题内容: 有没有办法动态创建测试用例?我尝试了以下方法。 ..可以正确创建所有方法(它们显示在并且可以调用),但是unittest的测试检测器也不执行(“ Ran 0 tests in …”) 由于我可能会问错问题-我想实现的目标是: 我有一个文件,其中包含测试数据,输入文件名列表和预期数据(在上述代码中简化为),存储在Python字典中。例如,键是类别,值是测试用例的列表。 目前,我只是遍历所

  • 问题内容: 我想使用JUnit 4创建一个junit测试套件,在运行测试套件之前,要包含的测试类的名称是未知的。 在JUnit 3中,我可以这样做: 并让该方法确定要运行的测试类。 在JUnit 4中,文档说要使用批注:构建我的测试套件。有许多SO答案显示了如何执行此操作。不幸的是,我看到的示例似乎不允许传递动态生成的TestClasses列表。 这样的建议我必须继承我不想做的子类。 动态指定的测

  • 问题内容: 我想为form.ModelChoiceField创建动态标签,我想知道如何做到这一点。我有以下表单类: 默认标签由Profile定义中指定的unicode函数定义。但是,需要动态创建由ModelChoiceField创建的单选按钮的标签。 首先,我认为我可以按照Django文档中的描述简单地覆盖ModelChoiceField。但这会创建静态标签。它允许你定义任何标签,但是一旦做出选择

  • 问题内容: 是否有任何使用Spring或java替换模板字符串以及值的API。 例如: 其中参数(,)中的形式。 问题答案: 我最喜欢的模板引擎是Apache Velocity 也可以与Spring很好地集成,此处有介绍性文章

  • 问题内容: 我在使用primefaces树实现实现动态树结构时遇到了一些麻烦。在primeface提供的展示柜中,代码的结构如下所示。但是,这是非常静态的。我试图弄清楚如何处理从数据库中获取的数据,在编译时树的深度是未知的。 我以为我可能需要某种递归方法来实现此目的,但我无法完全理解实现的样子。 有什么想法吗? 以下是primefaces的示例代码 问题答案: