2
我是pytest的新手,我正在尋求澄清一些關於參數化測試的混亂。pytest:paramaterized測試vs顯式測試
使用單個參數化測試函數或多個顯式測試僅在「輸入」方面有所不同,是否更好(即更清晰,更幹,更易維護)?
讓我舉一個例子,希望能夠更好地解釋我的觀點:
說我們寫了一個簡單的功能,merge_sort
,我們要利用各種輸入,例如包括負數,重複的數字,花車進行測試等
寫多個明確的測試:
def test_merge_sort():
unsorted = [2, 1, 3]
expected = [1, 2, 3]
assert merge_sort(unsorted) == expected
def test_merge_sort_negative():
unsorted = [-2, -1, -3]
expected = [-3, -2, -1]
assert merge_sort(unsorted) == expected
def test_merge_sort_including_zero():
unsorted = [2, 0, 1]
expected = [0, 1, 2]
assert merge_sort(unsorted) == expected
def test_merge_sort_repeated_number():
unsorted = [0, 1, 0]
expected = [0, 0, 1]
assert merge_sort(unsorted) == expected
def test_merge_sort_float():
unsorted = [0.1, 0.3, 0.2]
expected = [0.1, 0.2, 0.3]
assert merge_sort(unsorted) == expected
OR,寫一個,paramaterized測試:
@pytest.mark.parametrize("unsorted,expected", [
([2,1,3], [1,2,3]),
([-2,-1,-3], [-3,-2,-1]),
([2,0,1], [0,1,2]),
([0,1,0], [0,0,1]),
([0.1,0.3,0.2], [0.1,0.2,0.3]),
])
def test_merge_sort(unsorted, expected):
assert merge_sort(unsorted) == expected
我最初的想法是,多個顯式測試更清晰,更易於維護,就好像出現故障一樣,您將得到一個描述性函數名稱,指示待測試的特定案例。然而,參數化測試更加乾燥,並且可能更容易提取測試數據作爲其他測試的固定裝置(即使用相同的數據來測試功能)。
也許有什麼我在pytest文檔中錯過了哪些答案?
在此先感謝您的幫助!
如果有故障,預期/實際清單將包括在輸出中。唯一沒有得到的是自然語言描述,甚至可以通過將其包含在參數數據中來獲得。 – delnan
@delnan你可以舉一個例子來說明參數化測試的一部分嗎?這聽起來完全像我在找的東西。謝謝! – luggzy