pytest - вспомогательная функция или крепеж, параметризация - PullRequest
0 голосов
/ 24 августа 2018

pytest установка в основном основана на фиксаторах, и мне нравится этот подход, потому что он более атомарный, явный и менее ограничивает наследование классов в xUnit.Существуют ли какие-либо соглашения или руководящие указания по созданию приборов вместо вспомогательных функций? 1 Рассмотрим код:

def create_flavored_cake(flavor):
    return Cake(flavor)

def test_chocolate():
    cake = create_flavored_cake('chocolate')
    assert cake.is_yummy()

def test_broccoli():
    cake = create_flavored_cake('broccoli')
    assert cake.is_yummy()

def test_broccoli_with_risins():
    cake = create_flavored_cake('broccoli')
    cake.add('risins')
    assert cake.is_yummy()

Следует ли create_flavored_cake преобразовать в прибор? 2 Разве такой сценарий, в котором тесты имеют идентичные операторы, но разные параметры, должен побудить меня преобразовать вспомогательную функцию в прибор, чтобы упростить параметризацию и уменьшить дублирование? 3 Должен ли я использовать приборы только для настройки и демонтажа? 4 Или это не имеет значения, и по соглашению, если таковые имеются, следует использовать прибор с самого начала? 5

Мне не очень нравится параметризация приборов с помощью indirectНо, похоже, нет лучшего способа.Это потому, что это плохая практика? 6 Я знаю, что могу также использовать pytest.mark.parametrize, который будет выглядеть лучше IMO.Итак, где мне следует провести границу между использованием осветителя, вспомогательной функции и каким-то другим подходом (если есть лучшее решение) и с учетом их параметризации? 7

Я добавил верхние индексыдля справки вопроса.Вам не нужно давать им ответы.

1 Ответ

0 голосов
/ 21 сентября 2018

В случае, если мне нужно это сделать, я просто создаю прибор, который возвращает мою функцию.Я согласен с тем, что косвенный метод просто создает некрасивый код.

@pytest.fixture
def generate_data():
    def generate_data_function(some_parameters):
        # Code goes here
    return generate_data_function

def test_something(generate_data):
    my_test_parameters = # something
    generate_data(my_test_parameters)

    # Do test...

Что касается хорошей практики, по крайней мере, так я могу быстро увидеть, использует ли тест вспомогательную функцию, а не импортирует ееиз модуля для всего файла и только использовать его в некоторых тестах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...