如何将参数传递给 Django 中的 TestCase?

How can I pass in a parameter to my TestCase in Django?

使用 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'

显然,上面的命令是行不通的。我想在我的测试 class 中将 'mammal' 作为 animal_family 发送到 __init__ 方法。

将不胜感激。

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

例如:

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