Python: Запуск тестов со всеми комбинациями флагов функцийPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python: Запуск тестов со всеми комбинациями флагов функций

Сообщение Anonymous »

У нас есть несколько модулей, которые требуют обязательных флагов функции / резервного копирования. Эти флаги определены на уровне модуля. < /P>
module.py:

Код: Выделить всё

from enabled import is_enabled

FLAGS = {flag : is_enabled(flag) for flag in ("foo", "bar")}

if FLAGS.get("foo"):
def baz():
print("New baz")
else:
def baz():
print("Old baz")

print(f"Loaded module with {FLAGS=}")
print("#"*100)
< /code>
Enabled.py:
def is_enabled(_):
return True
Я могу использовать mock.patch для исправления is_enabled и с помощью importlib.reload я могу проверить все комбинации true и false для всех флагов для модуля (максимальное число флагов в одно и то же время - это 5 или 6, так что все это не так. Комбинации;
Я пробовал: < /p>

Создание декоратора: это терпит неудачу, потому что методы установки и разрыва не вызываются между повторяющимися прогонами в декораторе, что приводит к неудаче. Я могу либо назвать self.setup и self.teardown в каждом тесте, либо передавать эти методы декоратору и назвать их, но это похоже на грязный подход, который создает зависимости и хрупкий. Я собираюсь избежать этого, если это возможно. Я не уверен, возможно ли это / как использовать свой собственный тестовый бегун вместо существующего тестового бегуна (который не может быть легко заменен / рефактирован, поскольку он много используется). Есть ли способ для меня переопределить / игнорировать это и использовать свой собственный? Этот подход более чистый и технически более правильный, так как тестовый набор запускается несколько раз со всеми необходимой настройкой/разрывом, захваченными результатами и т. Д. False ?

Код: Выделить всё

import module
from importlib import reload
from unittest import TestCase
from itertools import product
from functools import wraps, partial
from unittest.mock import patch, DEFAULT

def run_all_combinations_decorator(func):
flags = sorted(module.FLAGS.keys())
combinations = list(product((True, False), repeat=len(flags)))

def is_enabled(new_flags, flag):
return new_flags.get(flag, DEFAULT)

@wraps(func)
def wrapper(*args, **kwargs):
for combination in combinations:
new_flags = {flag: enabled for flag, enabled in zip(flags, combination)}
print(f"Running with {new_flags=}")
with patch("enabled.is_enabled", side_effect=partial(is_enabled, new_flags)):
reload(module)
result = func(*args, **kwargs)  # Not ideal as only the last result is captured
return result

return wrapper

class ModuleTests(TestCase):
def setUp(self):
self.x = 0

@run_all_combinations_decorator
def test_baz(self):
# self.setUp() # Uncommenting this makes the test pass but is not ideal
module.baz()
self.x += 1
self.assertEqual(self.x, 1)  # Fails because setup is not called between runs
Если есть лучший подход к этому, который я еще не пробовал, пожалуйста, также предложите это.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ture-flags
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как создать пружинные профили с комбинациями нескольких значений (env + DC)
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как создать пружинные профили с комбинациями нескольких значений (env + DC)
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Руководство для суммы с несколькими комбинациями c#
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Руководство для суммы с несколькими комбинациями c#
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Совместите слова с конкретными комбинациями обратного количества
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»