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