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"))