Отдельная настройка, тестирование и проверка в pytest с гипотезой в качестве контекста покрытия. ⇐ Python
Отдельная настройка, тестирование и проверка в pytest с гипотезой в качестве контекста покрытия.
В нашей базе кода есть множество модульных тестов на основе свойств. Мы хотели бы получить контекстно-аннотированное покрытие кода наших модульных тестов. Pytest может это сделать, но ему необходимо знать, какая часть является фазой «Выполнение» (также известной как «Упражнение», «Действие»), а не фазой «Настройка/организация». Как нам обозначить границу, если мы используем гипотезу?
Например, у нас есть модульный тест.
@dataclasses.dataclass класс StepDummy: """Фиктивный объект, притворяющийся объектом Step для целей ввода.""" шаг_ид: интервал = -1 @данный( n_steps=st.lists(st.integers(0, 10), min_size=0, max_size=10), n_steps_to_remove=st.integers(0, 100), ) def test_remove_first_n_steps_from_tasks(n_steps: list[int], n_steps_to_remove: int) -> Нет: """Проверьте, что команда remove_first_n_steps удаляет ровно n шагов.""" # ДОГОВАРИВАТЬСЯ задачи = [ Задача( идентификатор_задачи=м, шаги=[ cast(Step, StepDummy(i)) # Нас не волнует внутренняя часть шага для меня в диапазоне (n_steps_in_task) ], ) для m, n_steps_in_task в enumerate(n_steps) ] total_n_steps_before = sum(len(m.steps) для m в задачах) Предположим (n_steps_to_remove Нет: """Настройка для .""" n_steps = [7, 10] n_steps_to_remove = 8 задачи = [ Задача( идентификатор_задачи=м, шаги=[ cast(Step, StepDummy(i)) # Нас не волнует внутренняя часть шага для меня в диапазоне (n_steps_in_task) ], ) для m, n_steps_in_task в enumerate(n_steps) ] total_n_steps_before = sum(len(m.steps) для m в задачах) вернуть задачи, n_steps_to_remove, total_n_steps_before def test_remove_first_n_steps_from_tasks(test_remove_first_n_steps_from_tasks_setup) -> Нет: """Проверьте, что remove_first_n_steps удаляет ровно n шагов.""" ( задачи, n_steps_to_remove, всего_n_steps_before ) = test_remove_first_n_steps_from_tasks_setup # ДЕЙСТВОВАТЬ уменьшенные_задачи = удалить_первые_n_steps_from_tasks(задачи, n_steps_to_remove) # УТВЕРЖДАТЬ total_n_steps_after = sum(len(m.steps) для m в сокращенных_задачах) утверждать total_n_steps_after + n_steps_to_remove == total_n_steps_before Не очень красиво, но возможно. Как мне это сделать с помощью гипотезы? Есть ли способ установить динамический контекст покрытия pytest на setup или run вручную?
В нашей базе кода есть множество модульных тестов на основе свойств. Мы хотели бы получить контекстно-аннотированное покрытие кода наших модульных тестов. Pytest может это сделать, но ему необходимо знать, какая часть является фазой «Выполнение» (также известной как «Упражнение», «Действие»), а не фазой «Настройка/организация». Как нам обозначить границу, если мы используем гипотезу?
Например, у нас есть модульный тест.
@dataclasses.dataclass класс StepDummy: """Фиктивный объект, притворяющийся объектом Step для целей ввода.""" шаг_ид: интервал = -1 @данный( n_steps=st.lists(st.integers(0, 10), min_size=0, max_size=10), n_steps_to_remove=st.integers(0, 100), ) def test_remove_first_n_steps_from_tasks(n_steps: list[int], n_steps_to_remove: int) -> Нет: """Проверьте, что команда remove_first_n_steps удаляет ровно n шагов.""" # ДОГОВАРИВАТЬСЯ задачи = [ Задача( идентификатор_задачи=м, шаги=[ cast(Step, StepDummy(i)) # Нас не волнует внутренняя часть шага для меня в диапазоне (n_steps_in_task) ], ) для m, n_steps_in_task в enumerate(n_steps) ] total_n_steps_before = sum(len(m.steps) для m в задачах) Предположим (n_steps_to_remove Нет: """Настройка для .""" n_steps = [7, 10] n_steps_to_remove = 8 задачи = [ Задача( идентификатор_задачи=м, шаги=[ cast(Step, StepDummy(i)) # Нас не волнует внутренняя часть шага для меня в диапазоне (n_steps_in_task) ], ) для m, n_steps_in_task в enumerate(n_steps) ] total_n_steps_before = sum(len(m.steps) для m в задачах) вернуть задачи, n_steps_to_remove, total_n_steps_before def test_remove_first_n_steps_from_tasks(test_remove_first_n_steps_from_tasks_setup) -> Нет: """Проверьте, что remove_first_n_steps удаляет ровно n шагов.""" ( задачи, n_steps_to_remove, всего_n_steps_before ) = test_remove_first_n_steps_from_tasks_setup # ДЕЙСТВОВАТЬ уменьшенные_задачи = удалить_первые_n_steps_from_tasks(задачи, n_steps_to_remove) # УТВЕРЖДАТЬ total_n_steps_after = sum(len(m.steps) для m в сокращенных_задачах) утверждать total_n_steps_after + n_steps_to_remove == total_n_steps_before Не очень красиво, но возможно. Как мне это сделать с помощью гипотезы? Есть ли способ установить динамический контекст покрытия pytest на setup или run вручную?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение