模型和工厂的一个真实来源
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。
我发现自己在键入提示 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。