您如何测试可能导致随机选择的函数?
例如:
from random import shuffle
def getMaxIndices(lst):
'''
:lst: list of int
Return indices of max value. If max value appears more than once,
we chose one of its indices randomly.
'''
index_lst = [(i, j) for i, j in enumerate(lst)]
shuffle(index_lst)
index_lst.sort(key=lambda x: x[1])
max_index = index_lst.pop()[0]
return max_index
你会如何测试它?
答案 0 :(得分:2)
由于您没有测试shuffling本身,因此您应该修补shuffle
以返回您设置的输出,以便进行确定性测试。
在这种情况下,它可能是:
@patch('random.shuffle', lambda x: x)
def test_get_max_Indices():
max_index = getMaxIndices([4,5,6,7,8])
assert max_index == 4
从测试中,您可以意识到返回值将仅取决于输入列表的长度。
您可以在文档中详细了解补丁:https://docs.python.org/dev/library/unittest.mock.html#unittest.mock.patch
答案 1 :(得分:0)
如果你想测试它,可以写一些类似的东西:
lst = [1,2,3,4,5,5]
assert getMaxIndices(lst) in (4,5)
测试结果是4还是5.
如果你想测试它可以是两个并且是随机的,运行1000次并测试你得到4和5大约相同的次数:
result = 0
for i in range(1000):
result += getMaxIndices(lst)
assert 4.3 <= result/1000 <= 4.7