Я хочу параметризовать тест для 2 входных значений и одного выходного значения, которое можно сравнить с таблицей умножения тестирования. Чтобы добиться минимального обслуживания, я придумал что-то вроде этого:
results = [[ 4, 5, 6],
[ 8, 10, 12],
[12, 15, 18]]
@pytest.mark.parametrize("x, ix", [(1, 0), (2, 1), (3, 2)])
@pytest.mark.parametrize("y, iy", [(4, 0), (5, 1), (6, 2)])
def test_multiplication(x, ix, y, iy):
assert x * y == results[ix][iy]
Теперь, это не идеально, потому что, если я хочу добавить новые x
, тогда мне придется добавить len(y) + 1 + 1
значений, которые являются: 3 новыми ожидаемыми значениями, дополнительными x
значениями и индексами , В идеале было бы добавить только 4 значения, то есть без управляющей переменной для индекса.
Мне также не нравится, как results
отделены от тестовой функции. Идеальным было бы:
@pytest.mark.parametrize("x", [1, 2, 3])
@pytest.mark.parametrize("y", [4, 5, 6])
@pytest.mark.result_matrix("result", [
[ 4, 5, 6],
[ 8, 10, 12],
[12, 15, 18],
])
def test_multiplication(x, y, result):
assert x * y == result
Я знаю, что могу сам добавить поддержку для такого маркера result_matrix
. Но могу ли я достичь того же, используя существующие инструменты? Пожалуйста, примите во внимание решение, которое будет хорошо работать для потенциально бесконечного числа входных параметров.