Sobes.tech
Middle

Čo je dekorátor v kontexte programovania?

sobes.tech AI

Odpoveď od AI

Dekorátor je štrukturálny návrhový vzor, ktorý umožňuje dynamicky pridávať nové zodpovednosti objektom tým, že ich obalí do špeciálnych dekorátorových objektov. Poskytuje flexibilnejšiu alternatívu k dedičstvu na rozšírenie funkčnosti.

Kľúčové myšlienky:

  • Obalovanie: Dekorátor obsahuje odkaz na obalovaný objekt.
  • Delegácia: Dekorátor deleguje volania metód na obalovaný objekt a môže vykonávať dodatočnú logiku pred alebo po volaní.
  • Rozšírenie funkčnosti: Umožňuje pridávať správanie k objektom bez zmeny ich štruktúry alebo použitia podtried.

Použitie v QA Automatizácii:

  • Logovanie akcií: Pridanie logovania k metódam interakcie s prvkami stránky.
  • Ovládanie výnimiek: Pridanie univerzálneho spracovania výnimiek k volaniam funkcií.
  • Opakovacie pokusy: Implementácia mechanizmu na opakované pokusy pri flaky testoch alebo akciách.
  • Vkladanie pred-/po-podmienok: Vykonávanie určitých akcií pred alebo po hlavnom kroku testu.

Príklad v Pythone:

def log_method_call(func):
    # Dekorátor, ktorý zaznamenáva volanie funkcie
    def wrapper(*args, **kwargs):
        print(f"Volanie funkcie: {func.__name__} s args: {args}, kwargs: {kwargs}")
        result = func(*args, **kwargs)
        print(f"Funkcia {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):
        # Metóda, ktorá používa dekorátor
        print(f"Klik na prvok lokalizovaný podľa: {locator}")
        # Simulácia akcie ovládača
        # self.driver.find_element(*locator).click()
        return "Tlačidlo stlačené"

# Použitie
# driver = ... # Inicializácia ovládača
# page = PageObject(driver)
# page.click_button(("ID", "submit_button"))