Sobes.tech
Middle

Co je to dekorátor v kontextu programování?

sobes.tech AI

Odpověď od AI

Dekorátor je strukturální návrhový vzor, který umožňuje dynamicky přidávat nové odpovědnosti objektům tím, že je obalí do speciálních dekorátorových objektů. Nabízí flexibilnější alternativu k dědičnosti pro rozšíření funkčnosti.

Klíčové myšlenky:

  • Obalování: Dekorátor obsahuje odkaz na obalovaný objekt.
  • Delegace: Dekorátor deleguje volání metod na obalovaný objekt a může před nebo po volání provádět dodatečnou logiku.
  • Rozšíření funkčnosti: Umožňuje přidávat chování k objektům bez změny jejich struktury nebo použití podtříd.

Použití v QA Automatizaci:

  • Logování akcí: Přidání logování k metodám interakce s prvky stránky.
  • Ošetření výjimek: Přidání univerzálního ošetření výjimek k voláním funkcí.
  • Opakované pokusy: Implementace mechanismu opakovaných pokusů o spuštění flaky testů nebo akcí.
  • Vkládání před-/po-podmínek: Provádění určitých akcí před nebo po hlavním kroku testu.

Příklad v Pythonu:

def log_method_call(func):
    # Dekorátor, který zaznamenává volání funkce
    def wrapper(*args, **kwargs):
        print(f"Volání funkce: {func.__name__} s args: {args}, kwargs: {kwargs}")
        result = func(*args, **kwargs)
        print(f"Funkce {func.__name__} vrátila: {result}")
        return result
    return wrapper

class PageObject:
    def __init__(self, driver):
        self.driver = driver

    @log_method_call
    def click_button(self, locator):
        # Metoda používající dekorátor
        print(f"Kliknutí na prvek lokalizovaný podle: {locator}")
        # Simulace akce ovladače
        # self.driver.find_element(*locator).click()
        return "Tlačítko kliknuto"

# Použití
# driver = ... # Inicializace ovladače
# page = PageObject(driver)
# page.click_button(("ID", "submit_button"))