模型和工厂的一个真实来源

One source of truth for model and factory

我发现自己在键入提示 API 的 JSON 响应时经常编写相同的代码,例如:

class Foo(TypedDict):
    foo: int
    baz: str

来自 json 回复:

{
   'foo': 1,
   'baz': 'somestr'
}

我现在想写一些工厂,这样我就可以模拟和测试这个端点。所以我必须写一个非常相似的:

class FooFactory(factory.DictFactory):
    foo = Faker("random_int")
    baz = Faker("text")

同时维护它们是一件很痛苦的事情。有没有办法让工厂使用 Foo 作为“灵感”- 即类型提示是 str 所以使用 Faker("text"),类型提示是 int 所以使用 Faker("random_int") 等... ?

我试过:

class FooFactory(factory.DictFactory):
    class Meta:
       model = Foo

但这似乎并没有真正做任何值得注意的事情 - 因为它只是 returns {} 在我的测试中。


此外,我不限于 TypedDicts 或 factoryboy。我只是不想把同样的东西写两次:)

这是 factory_boy 的计划功能,请参阅 https://github.com/FactoryBoy/factory_boy/issues/836

该问题指向可以在您的代码中重复使用的草案实现,方法是 class 子 Factory class。