Я бы сказал, что в комментарии должно быть полное предупреждение или строка документации тестовой функции.Это не недоверенный пользовательский ввод, который должен быть проверен;Кроме того, лучше сделать тесты максимально простыми.Если какой-то разработчик неправильно использует тестовые входы, не прочитав сначала документы, это его собственная ошибка.
Тем не менее, проверка аргументов теста, безусловно, возможна с помощью pytest
(например, чтобы сообщить разработчикам, что в тестируемом нет ничего плохого)функция, и они используют тест неправильно).Я бы сделал неявную проверку аргументов с помощью косвенной параметризации.В приведенном ниже примере каждый аргумент из mark.parametrize
будет сначала передан в прибор с тем же именем, где вы можете выполнить предварительную обработку перед началом теста:
def validate(input):
try:
datetime.strptime(input, '%H:%M')
except ValueError as e:
pytest.fail('Your test parametrization is wrong. The test argument is erroneous: {}'.format(e))
@pytest.fixture
def t_str(request):
validate(request.param)
return request.param
@pytest.fixture
def result_str(request):
validate(request.param)
return request.param
@pytest.mark.parametrize(
"t_str, result_str",
[
('10:30', '11:30'),
('11:30', '12:30'),
('10:30', 'bar'),
],
indirect=True
)
def test_good_input(t_str, result_str):
...
Теперь третий тест не пройдёт с описательнымсообщение об ошибке:
test_spam.py::test_good_input[10:30-11:30] PASSED
test_spam.py::test_good_input[11:30-12:30] PASSED
test_spam.py::test_good_input[10:30-bar] ERROR
============================================= ERRORS ==============================================
__________________________ ERROR at setup of test_good_input[10:30-bar] ___________________________
...
input = 'bar'
def validate(input):
try:
datetime.strptime(input, '%H:%M')
except ValueError as e:
> pytest.fail('Your test parametrization is wrong. The test argument is erroneous: {}'.format(e))
E Failed: Your test parametrization is wrong. The test argument is erroneous: time data 'bar' does not match format '%H:%M'
test_spam.py:15: Failed
================================ 2 passed, 1 error in 0.05 seconds ================================
Дополнительная информация о непрямой параметризации: Откладывание настройки параметризованных ресурсов