如何将Factory Boy字段设置为必须用户输入?
实现强制传入
user_input字段的Factory方法 要在factory_boy的Factory类中强制要求初始化时必须传入user_input字段,可以通过以下两种方式实现:
方法一:字段定义层面直接抛出异常
利用factory.SelfAttribute引用自定义方法,在未传入参数时触发异常:
import factory class FooFactory(factory.Factory): class Meta: model = dict # 替换为你的实际模型类 name = factory.Faker("name") user_input = factory.SelfAttribute("__require_user_input()") @classmethod def __require_user_input(cls): raise ValueError("必须传入user_input参数") # 正常运行 foo = FooFactory(user_input="blah blah") # 抛出错误 foo = FooFactory()
方法二:重写创建方法做参数校验
重写Factory的_create类方法,在实例创建前检查参数是否存在:
import factory class FooFactory(factory.Factory): class Meta: model = dict # 替换为你的实际模型类 name = factory.Faker("name") @classmethod def _create(cls, model_class, *args, **kwargs): if "user_input" not in kwargs: raise ValueError("必须传入user_input参数") return super()._create(model_class, *args, **kwargs) # 正常运行 foo = FooFactory(user_input="blah blah") # 抛出错误 foo = FooFactory()
说明
- 方法一直接在字段定义中声明强制要求,语义更直观;
- 方法二更适合需要批量校验多个必填字段的场景,逻辑集中便于维护。
内容的提问来源于stack exchange,提问作者Saeed Mofidi
相关产品推荐
相关产品推荐

