工厂-男孩工厂的多重继承似乎只继承了第一部分

2024-10-03 00:30:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从两个工厂工厂的男孩类继承,但似乎只有第一个类继承,第二个被忽略。(他们有共同的父母。)

class BasicFactory(factory.DjangoModelFactory):
    # Meta class, some SubFactories and RelatedFactoriues, a post_generation method

class BasicFactoryWithExtraRelatedFactories(BasicFactory):
    another_related = factory.RelatedFactory(SomethingElseFactory, 'basic', etc)

class BasicFactoryWithExtraPostGeneration(BasicFactory):
    @factory.post_generation
    def post(self, create, extracted, **kwargs):
        """
        A replacement post_generation method
        """

class ExtraRelatedAndExtraPostGenerationFactory(BasicFactoryWithExtraRelatedFactories, BasicFactoryWithExtraPostGeneration)
    """
    This seems to inherit the extra RelatedFactories, but not the extra post_generation method.
    """

class ExtraRelatedAndExtraPostGenerationFactory(BasicFactoryWithExtraPostGeneration, BasicFactoryWithExtraRelatedFactories)
    """
    This seems to inherit the extra post_generation method, but not the extra RelatedFactories.
    """

我有什么办法可以继承这两个?在

我知道,这是一个很高的要求,但它可以为我遇到的问题提供一个非常漂亮的解决方案,这样我就可以简单地用多重继承来创建我所需的所有测试用例组合。(我认识到,在“工厂男孩”中提供支持可能并不“简单”。)


Tags: thefactory工厂thispostextramethodclass
1条回答
网友
1楼 · 发布于 2024-10-03 00:30:58

这种方法对我有效,两个final子类都继承了相关工厂和后生成方法,因此我预计实际场景比上面的测试代码更复杂。这是我的实际代码:

class BasicFactory(factory.DjangoModelFactory):

    country = factory.SubFactory(CountryFactory)
    code = factory.Sequence(lambda n: 'unit%d' % n)
    name = factory.Sequence(lambda n: 'Unit %d' % n)
    full_name = factory.Sequence(lambda n: 'Unit %d, etc.' % n)
    unit_type = factory.SubFactory(GeographicUnitTypeFactory)

    class Meta:
        model = 'spatial.GeographicUnit'


class BasicFactoryWithExtraRelatedFactories(BasicFactory):
    season = factory.RelatedFactory(SeasonFactory, 'geographicunit')


class BasicFactoryWithExtraPostGeneration(BasicFactory):

    @factory.post_generation
    def post(self, create, extracted, **kwargs):
        """
        A replacement post_generation method
        """
        self.name = self.name + ' after post'


class ExtraRelatedAndExtraPostGenerationFactory(BasicFactoryWithExtraRelatedFactories, BasicFactoryWithExtraPostGeneration):
    """
    This seems to inherit the extra RelatedFactories, but not the extra post_generation method.
    """


class ExtraPostGenerationAndExtraRelatedFactory(BasicFactoryWithExtraPostGeneration, BasicFactoryWithExtraRelatedFactories):
    """
    This seems to inherit the extra post_generation method, but not the extra RelatedFactories.
    """

from django.test import TestCase


class MyTestCase(TestCase):

    def test_extrarelated(self):
        obj = ExtraRelatedAndExtraPostGenerationFactory()
        self.assertTrue(obj.name.endswith(' after post'))
        self.assertEqual(Season.objects.filter(geographicunit=obj).count(), 1)

    def test_extrapostgeneration(self):
        obj = ExtraPostGenerationAndExtraRelatedFactory()
        self.assertTrue(obj.name.endswith(' after post'))
        self.assertEqual(Season.objects.filter(geographicunit=obj).count(), 1)

结果如下:

^{pr2}$

相关问题 更多 >