#python #pytest #fixtures
Вопрос:
У меня есть следующий код в моем test_myfunc.py
@pytest.fixture
def dummy_string_EN():
return 'This is an English string.'
@pytest.fixture
def dummy_string_DE():
return 'Das hier ist Deutsch.'
@pytest.fixture
def dummy_string_FR():
return 'la maison blanche est tombée'
Затем я хотел бы использовать некоторые из этих текстов для проверки моих функций:
def test_load_language_models(dummy_string_EN):
tee = myfunc(dummy_string_EN)
assert tee.language == 'EN'
def test_load_language_models(dummy_string_DE):
tee = myfunc(dummy_string_DE)
assert tee.language == 'DE'
def test_other_method(dummy_string_DE):
tee = myfunc_2(dummy_string_DE)
Assert tee.attribute3 == 'whatever
У меня есть около 6 строковых переменных на 4 разных языках, которые довольно длинные.
Мне кажется, что я что-то упускаю, так как не может быть, чтобы я мог создать приспособление только каким-либо другим способом, кроме как вернуть его из функции.
Есть ли какое-либо другое решение, чтобы избежать всей этой котельной плиты? т. Е. написать декоратор, а затем определить метод для возврата переменной?
Спасибо.
Ps: позже Отредактируем. Чтобы быть ясным, я просто ищу способ использовать переменные (строки или списки) в сотнях тестов различных методов. Каждый метод дает другой результат с одним и тем же строковым вводом. Таким образом, парного подхода не существует.
Ответ №1:
Если данные статичны, ничто не требует, чтобы они предоставлялись с использованием механизма фиксации: вы можете просто использовать словарь уровня модуля и выбрать любую строку, которая вам нужна, внутри ваших тестовых функций с помощью ключа. И если строки являются динамическими, у вас может быть промежуточное приспособление для упаковки всех языковых строк в словарь и передачи этого словаря функциям, чтобы они могли параметризовать код языка вместо жестко заданного имени приспособления:
# [per language fixture definition]
@pytest.fixtue
def all_texts(dummy_string_EN, dummy_string_DE, ...):
strings = {
"EN": dummy_string_EN,
"DE": dummy_string_DE,
...
}
@pytest.mark.parametrize("ln_code", ["EN", "DE", ...])
def test_load_language_models(strings, ln_code):
tee = myfunc(strings[ln_code])
assert tee.language == ln_code
Комментарии:
1. Я добавил комментарий to.my вопрос, потому что, даже если этот ответ верен, но не решает на 100% мою проблему.