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

对于基于属性的测试,给定一个固定的值列表,我需要生成一个可变大小的列表,其中顺序很重要并且允许重复。例如,如果我的固定列表是


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?


眼眸繁星
浏览 136回答 2
2回答

幕布斯6054654

lists您正在寻找和策略的组合sampled_from:from hypothesis import strategies as sttexts = ['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 Listdef 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):    ...

米琪卡哇伊

由于您最多需要 20 个项目,因此生成一个从 1 到 20 的随机数:import randomsize = random.randint(1,20)然后使用该数字从源列表中进行 N 次独立选择:texts = ['t1', 't2', 't3', 't4']random_texts = []for _ in range(size):    random_texts.append(random.choice(texts))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python