gpt4 book ai didi

python - 如何使用 python 假设编写生成元组列表的策略?

转载 作者:太空宇宙 更新时间:2023-11-03 14:13:55 24 4
gpt4 key购买 nike

我开始使用hypothesis编写我的测试。我喜欢它,但我不得不生成某种数据。

我有一个使用数据列表的测试,可以从元组(键,值)构建。

键可以是文本、整数或 float ,值可以是任何可比较的值。对于一项测试,所有键必须是同一类型,所有值必须是同一类型。

我发现生成我想要的数据的唯一方法是这样的:

@given(
st.one_of(
st.lists(st.tuples(st.integers(), st.integers())),
st.lists(st.tuples(st.integers(), st.floats())),
st.lists(st.tuples(st.integers(), st.text())),
st.lists(st.tuples(st.floats(), st.integers())),
st.lists(st.tuples(st.floats(), st.floats())),
st.lists(st.tuples(st.floats(), st.text())),
#...
))
def test_stuff(lst):
data = [Mydata(k, v) for k, v in lst]
#...

是否有更好的方法来生成我想要测试的所有数据类型组合?

最佳答案

我首选的方法是在 @given 中选择键和值策略,然后 construct your strategy and draw from it inside your test 。 “所有键必须属于这些类型中的同一类型”是一个不寻常的要求,但交互式数据非常强大:

@given(
st.data(),
key_st=st.sampled_from([st.integers(), st.floats(), st.text()]),
value_st=st.sampled_from([st.integers(), st.floats(), st.text()]),
)
def test_stuff(data, key_st, value_st):
test_data = data.draw(st.lists(st.builds(Mydata, key_st, value_st)))
... # TODO: assert things about test_data

我还使用了 st.builds() 而不是通过元组 - 因为我们在测试中调用它,所以 Mydata 中的任何异常都将是 (最小化)测试失败而不是错误。

关于python - 如何使用 python 假设编写生成元组列表的策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48326920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com