你將如何測試一個可能導致隨機選擇的函數?如何在Python中測試random.choice?
例如:
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
你會如何測試它?
你要測試什麼?隨機生成器是真正的隨機數,還是你的邏輯對所有可能的隨機輸入都正確?你真的需要第一個嗎?如果是後者:只需將處理輸入值的處理與隨機數生成相分離,只需向處理程序和單元測試處理程序注入一個數字即可。 – k0pernikus
我完全同意你的第一點,我不應該寫這個函數,只是文檔字符串。我不確定要理解你的第二點(其實,我確信我沒有),你能否更明確一些? – Gaut
我的第二點是關心不關心源值的隨機性。假設您想通過「美好的一天!」隨機迎接客戶!和「怎麼了!」。然後你需要的是一個接受整數的函數,例如'0'表示「美好的一天」,'1'表示''什麼「。這個函數不需要知道輸入是隨機的,只需要接受一定範圍的輸入來輸出合適的結果。而且你可以進行單元測試。 – k0pernikus