1

我正在研究使用假设进行一些测试。我喜欢它可以生成大量数据来查找边缘情况。但是,我希望能够再定制一些测试。

例如,我可以定义一个测试来生成整数,但我希望这个测试符合有效的邮政编码很好。我可以这样做吗?或者,也许更复杂的符合非美国邮政编码,它们都是整数,但其他人(比如加拿大)不是?

对于预期符合某种掩码(即电子邮件地址)的文本字段,相同类型的东西将很有用。

现在我有这样装饰的测试用例:

from hypothesis import given, strategies as st
@given(st.integers())

对于这种特殊情况,我希望它也符合美国邮政编码规则。

@given(st.text())

对于这个,我希望它生成类似电子邮件格式的模式。

假设可以进行这种类型的生成吗?

4

1 回答 1

3

假设可以或多或少地做任何你喜欢的生成,但如果没有内置策略,你需要自己编写一个,通常使用 @composite 装饰器。这是该站点上有关如何执行此类操作的文章

对于特定案例的电子邮件,有一些正在进行的工作来提供一个好的内置实现,但它可能不会那么快到达。

我不知道有任何邮政编码的东西,并且正确地执行它看起来很难,但是看看其他随机生成器你可能会逃脱st.integers(501, 99950).map(lambda i: "%05d" % (i,)),它只需要一个介于 501 和 99950 之间的整数并将其格式化为5位代码。

于 2017-06-22T07:22:29.400 回答