使用Python测试框架hypothesis,我想实现一个相当复杂的测试策略组合: 1.我想测试创建s由唯一字符集组成的字符串。2. 每个示例我都想运行一个函数func(s: str, n: int) -> Tuple[str, int],该函数接受一个字符串s和一个整数n作为参数。在这里,我想让整数也由假设填充,但 的最大值n应该是len(s), 的长度s。我尝试过使用flatmap,但还没有充分理解它,无法让它发挥作用。这是我尝试过的最小示例:
from typing import Tuple
from hypothesis import given
from hypothesis.strategies import text, integers
def func(s: str, n: int) -> Tuple[str, int]:
for i in range(n):
pass # I do something here on s, which is not relevant to the question
return (s, n)
# 1. Create the strategy for unique character strings:
unique_char_str = text().map(lambda s: "".join(set(s)))
#2. Create the complex strategy with flatmap:
confined_tuple_str_int = unique_char_str.flatmap(
lambda s: func(s, integers(min_value=0, max_value=len(s)))
)
当我尝试使用这个新策略时,
@given(tup=confined_tuple_str_int)
def test_foo(tup):
pass
我的测试失败了,声称
test_foo - 类型错误:“LazyStrategy”对象无法解释为整数
在行 中,for i in range(n):in不是整数,而是对象。funcnLazyStrategy
这告诉我,我对flatmap工作原理有一些误解,但我自己无法弄清楚。
我需要做什么才能正确定义我的测试策略?
扬帆大鱼
相关分类