假设可以用来生成特定类型的数据(即邮政编码或 phone 数字)吗?
Can hypothesis be used to generate data of a specific type (ie. zip codes or phone numbers)?
我正在考虑使用 hypothesis 进行一些测试。我喜欢它可以生成各种各样的数据来查找边缘案例。但是,我希望能够稍微调整一些测试。
例如,我可以定义一个测试来生成 integers,但我希望这个测试符合有效的邮政编码。我可以这样做吗?或者,也许,更复杂的符合非美国邮政编码,它们都是整数,但其他人(比如加拿大)不是?
相同类型的内容对于 text 预期符合某种掩码类型(即电子邮件地址)的字段很有用。
现在我有这样装饰的测试用例:
from hypothesis import given, strategies as st
@given(st.integers())
对于这种特殊情况,我希望它也符合美国邮政编码规则。
@given(st.text())
对于这个,我希望它生成类似电子邮件格式的模式。
假设能做这种生成吗?
假设可以或多或少地生成任何你喜欢的类型,但如果没有内置策略,你需要自己编写一个,通常使用@composite 装饰器。 Here's an article from the site on how to do this sort of thing.
对于特定案例的电子邮件,some ongoing work 提供了一个良好的内置实现,但它可能不会很快到达。
我不知道有什么东西可以处理邮政编码,而且正确地处理它看起来很难,但是看看其他随机生成器可以做什么,你可能可以使用 st.integers(501, 99950).map(lambda i: "%05d" % (i,))
,它只需要一个整数介于 501 和 99950 之间,并将其格式化为 5 位代码。
我正在考虑使用 hypothesis 进行一些测试。我喜欢它可以生成各种各样的数据来查找边缘案例。但是,我希望能够稍微调整一些测试。
例如,我可以定义一个测试来生成 integers,但我希望这个测试符合有效的邮政编码。我可以这样做吗?或者,也许,更复杂的符合非美国邮政编码,它们都是整数,但其他人(比如加拿大)不是?
相同类型的内容对于 text 预期符合某种掩码类型(即电子邮件地址)的字段很有用。
现在我有这样装饰的测试用例:
from hypothesis import given, strategies as st
@given(st.integers())
对于这种特殊情况,我希望它也符合美国邮政编码规则。
@given(st.text())
对于这个,我希望它生成类似电子邮件格式的模式。
假设能做这种生成吗?
假设可以或多或少地生成任何你喜欢的类型,但如果没有内置策略,你需要自己编写一个,通常使用@composite 装饰器。 Here's an article from the site on how to do this sort of thing.
对于特定案例的电子邮件,some ongoing work 提供了一个良好的内置实现,但它可能不会很快到达。
我不知道有什么东西可以处理邮政编码,而且正确地处理它看起来很难,但是看看其他随机生成器可以做什么,你可能可以使用 st.integers(501, 99950).map(lambda i: "%05d" % (i,))
,它只需要一个整数介于 501 和 99950 之间,并将其格式化为 5 位代码。