假设可以用来生成特定类型的数据(即邮政编码或 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 位代码。