基于棒棒糖模式的假设库生成随机测试数据
lollipop-hypothesis的Python项目详细描述
利用基于棒棒糖模式的假设生成随机测试数据的库。
示例
fromcollectionsimportnamedtupleimportlollipop.typesasltimportlollipop.validatorsaslvimportstringEMAIL_REGEXP=r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]{2,}\.[a-zA-Z0-9-.]{2,}$"Email=lt.validated_type(lt.String,'Email',lv.Regexp(EMAIL_REGEXP))User=namedtuple('User',['name','email','age'])USER=lt.Object({'name':lt.String(validate=lv.Length(min=1)),'email':Email(),'age':lt.Optional(lt.Integer(validate=lv.Range(min=18))),},constructor=User)importhypothesisashimporthypothesis.strategiesashsimportlollipop_hypothesisaslh# Write a test using data generation strategy based on Lollipop schema@h.given(lh.type_strategy(USER))deftest_can_register_any_valid_user(user):register(user)# Configure custom strategy for Email typelh.register(Email,lambda_,type,context=None: \ hs.tuples(hs.text('abcdefghijklmnopqrstuvwxyz''ABCDEFGHIJKLMNOPQRSTUVWXYZ''0123456789''_.+-',min_size=1),hs.lists(hs.text('abcdefghijklmnopqrstuvwxyz''ABCDEFGHIJKLMNOPQRSTUVWXYZ''0123456789',min_size=2),min_size=2,average_size=3,)).map(lambda(name,domain_parts):name+'@'+'.'.join(domain_parts)),)# Or configure custom strategy for the whole type instancelh.register(USER,lambdaregistry,type,context=None: \ hs.builds(User,name=hs.text(min_size=1),email=registry.convert(Email(),context),age=hs.integers(min_value=0,max_value=100),))
安装
$ pip install lollipop-hypothesis # install optional package for regex support $ pip install lollipop-hypothesis[regex]
要求
- python>;=2.7和<;=3.6
- lollipop>;=1.1.3
- hypothesis>;=3.8
- (可选)hypothesis-regex>;=0.1
项目链接
许可证
麻省理工学院许可。有关详细信息,请参见捆绑的LICENSE文件。