【问题标题】:How can I pass in a parameter to my TestCase in Django?如何在 Django 中将参数传递给我的 TestCase?
【发布时间】:2018-10-23 09:36:12
【问题描述】:

使用 Django 自己的文档中示例的编辑版本,假设我的代码如下所示:

from django.test import TestCase
from myapp.models import Animal

class AnimalTestCase(TestCase):

    def __init__(self, animal_family):
        self.animal_family = animal_family        

    def setUp(self):
        Animal.objects.create(name="lion", sound="roar", family=self.animal_family)

    def test_animals_can_speak(self):
        """Animals that can speak are correctly identified"""
        lion = Animal.objects.get(name="lion")
        self.assertEqual(lion.speak(), 'The mammal lion says "roar"')

基本上,我想将 animal_family 参数传递到我的测试中,或者至少从我的终端传递类似的东西。像这样的

python manage.py test myapp.tests.AnimalTestCase 'mammal'

显然,上面的命令不起作用。我想将“哺乳动物”作为 animal_family 发送到我的测试类中的 __init__ 方法。

我们将不胜感激。

【问题讨论】:

  • 为什么要这样做?测试需要自包含。如果您想使用一系列参数进行测试,则应在测试中定义这些参数本身。
  • @DanielRoseman 好的,但有可能吗?
  • 正如@DanielRoseman 所说,测试不应依赖于传递参数。如果你想有多个选项,那么你应该编写多个测试。
  • 但是有没有办法做到这一点?我意识到测试应该是自包含的,以及所有其他约定,但这会为我节省很多时间。

标签: django django-tests


【解决方案1】:

虽然自包含测试应该是最佳实践,但如果您真的想这样做,您可以在执行测试命令时设置一个环境变量。

例如:

import os
from django.test import TestCase
from myapp.models import Animal

class AnimalTestCase(TestCase):      

    def setUp(self):
        # Retrieve the animal family from the environment variable
        animal_family = os.environ['animal_family']
        Animal.objects.create(name="lion", sound="roar", family=animal_family)

    def test_animals_can_speak(self):
        """Animals that can speak are correctly identified"""
        lion = Animal.objects.get(name="lion")
        self.assertEqual(lion.speak(), 'The mammal lion says "roar"')

然后调用测试命令如:

export animal_family=mammal;python manage.py test myapp.tests.AnimalTestCase

【讨论】:

  • 无需使用export。只需使用env 如下:env animal_family=mammal python manage.py test myapp.tests.AnimalTestCase 注意没有“;”在python前面
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 2015-07-10
  • 2020-09-06
相关资源
最近更新 更多