簡體   English   中英

如何使用 Ava 創建參數測試

[英]How to create parametric tests with Ava

來自 Python,我在編寫參數測試時習慣了這種語法(希望它是不言自明的):

@pytest.mark.parametrize('a', [0, 1, 2])
@pytest.mark.parametrize('b', [0, 1, 2])
def test_sum(a, b):
    assert sum(a, b) == a + b

然后,測試框架將為ab每個組合運行test_sum() ,將每個組合視為不同的測試(即:9 個組合可以獨立失敗/通過)。

我一直在玩Ava並且使用宏,我可以輕松地使用不同的參數運行相同的測試:

import test from "ava";

function sum(a, b) {
    return a + b;
}

function macroSum(t, a, b) {
    t.is(sum(a, b), a + b);
}
macroSum.title = (providedTitle = "", a, b) =>
    `${providedTitle}: ${a} + ${b}`

test(macroSum, 0, 0);
test(macroSum, 0, 1);
test(macroSum, 0, 2);
test(macroSum, 1, 0);
test(macroSum, 1, 1);
test(macroSum, 1, 2);
test(macroSum, 2, 0);
test(macroSum, 2, 1);
test(macroSum, 2, 2);

唯一的問題是我需要多次明確地調用test() 有什么辦法可以做我習慣在 Python 中做的事情嗎? (為每個參數聲明一個值列表,讓框架組合它們並為我運行所有組合)

請注意,這與在測試中嵌入循環不同。 對於參數測試,每個組合都是對框架的單獨測試,具有不同的標題/標識符,並且可以獨立於其他參數組合失敗/通過。

這意味着,我正在尋找的不是一個單一的測試,如:

test('all combinations', t => {
  [0, 1, 2].forEach(a => {
    [0, 1, 2].forEach(b => {
      t.is(sum(a, b), a + b);
    });
  });
});

不。最好的辦法是循環遍歷一組參數:

for (const params of [
  [1, 0],
  [1, 1],
]) {
  test(macroSum, ...params)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM