У меня есть класс, который представляет определенное сложное состояние. Это состояние может измениться, и у меня есть еще один экземпляр этого класса, который представляет «истинное» состояние. Я написал функцию, которая выполняет некоторую различную логику и выясняет, как привести текущее состояние в истинное состояние, если они отличаются.
Я хочу протестировать эту функцию, используя pytest
. Существует множество сценариев, но логика тестирования довольно проста и сводится к (псевдокод Python):
def test_diffing(current_state, prescribed_state):
properties_to_add = []
properties_to_delete = []
properties_to_modify = []
properties_to_add, properties_to_delete, properties_to_modify = diff_logic(current_state, prescribed_state)
assert properties_to_add == 1
assert properties_to_delete == 0
assert properties_to_modify == 3
Числа в правой части утверждения зависят от того, что такое current_state
. У меня много current_state
сценариев.
Как лучше всего написать единичный модульный тест, как указано выше, со многими парами фикстур, так что current_state передается вместе с ожидаемыми значениями утверждений?
Я рассмотрел параметризацию приспособлений pytest, но проблема с этим подходом заключается в том, что он использует декораторы и очень быстро становится уродливым *, особенно с большим количеством аргументов и большим количеством тестовых примеров. Похоже, что это не то, для чего мне следует использовать приспособления.
Как лучше всего добиться того, что я пытаюсь делать чисто?
* Я говорю, что это становится некрасиво, потому что наличие 15 или 20 наборов аргументов для декоратора очень сбивает с толку и вводит много логики в сам декоратор.