为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用假设从给定列表生成可变大小的列表?

如何使用假设从给定列表生成可变大小的列表?

眼眸繁星 2023-03-30 09:51:28
对于基于属性的测试,给定一个固定的值列表,我需要生成一个可变大小的列表,其中顺序很重要并且允许重复。例如,如果我的固定列表是texts = ['t1', 't2', 't3', 't4']我想生成不同的变体,例如['t2']['t4', 't1'] # Subset and different order[]['t3', 't1', 't2'] # Different order['t4', 't4', 't4', 't1'] # Repetition of t4['t1', 't2', 't1'] # Repetition but at different location['t1', 't2']['t2', 't1'] # different order from the one above and considered different.我目前设法使用的是permutations策略from hypothesis import given, strategies as st@given(st.permutations(texts))def test_x(some_text):   ...   pass但这并没有给我可变大小,重复其他需求:如何指定最大变量列表为 20?
查看完整描述

2 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

lists您正在寻找和策略的组合sampled_from

from hypothesis import strategies as st


texts = ['t1', 't2', 't3', 't4']

lists_from_texts = st.lists(st.sampled_from(texts), max_size=20)


...


@given(lists_from_texts)

def test_x(some_text):

    ...

或者如果您希望能够更改不同测试的源列表:


from typing import List



def lists_from_texts(source: List[str]) -> st.SearchStrategy[List[str]]:

    return st.lists(st.sampled_from(source), max_size=20)


...


@given(lists_from_texts(texts))

def test_x(some_text):

    ...


查看完整回答
反对 回复 2023-03-30
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

由于您最多需要 20 个项目,因此生成一个从 1 到 20 的随机数:


import random

size = random.randint(1,20)

然后使用该数字从源列表中进行 N 次独立选择:


texts = ['t1', 't2', 't3', 't4']

random_texts = []

for _ in range(size):

    random_texts.append(random.choice(texts))


查看完整回答
反对 回复 2023-03-30
  • 2 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信