Middle
Šta je dekorator u kontekstu programiranja?
sobes.tech АИ
Одговор од АИ
Dekorator je strukturni obrazac dizajna koji omogućava dinamičko dodavanje novih odgovornosti objektima, obavijajući ih u posebne dekoratorske objekte. On pruža fleksibilniju alternativu nasleđivanju za proširenje funkcionalnosti.
Ključne ideje:
- Obavijanje: Dekorator sadrži referencu na obavijeni objekat.
- Delegiranje: Dekorator delegira pozive metoda na obavijeni objekat i može izvršiti dodatnu logiku pre ili posle poziva.
- Proširenje funkcionalnosti: Omogućava dodavanje ponašanja objektima bez promene njihove strukture ili korišćenja podklasa.
Primena u QA Automatizaciji:
- Logovanje akcija: Dodavanje logovanja metodama interakcije sa elementima stranice.
- Rukovanje izuzecima: Dodavanje univerzalnog rukovanja izuzecima na pozive funkcija.
- Ponavljajući pokušaji: Implementacija mehanizma za ponovljene pokušaje izvršavanja flaky testova ili akcija.
- Umetanje pre/post uslova: Izvršavanje određenih radnji pre ili posle glavnog koraka testa.
Primer u Pythonu:
def log_method_call(func):
# Dekorator koji beleži poziv funkcije
def wrapper(*args, **kwargs):
print(f"Poziv funkcije: {func.__name__} sa args: {args}, kwargs: {kwargs}")
result = func(*args, **kwargs)
print(f"Funkcija {func.__name__} vratila: {result}")
return result
return wrapper
class PageObject:
def __init__(self, driver):
self.driver = driver
@log_method_call
def click_button(self, locator):
# Metod koji koristi dekorator
print(f"Klik na element lociran po: {locator}")
# Simulacija akcije drajvera
# self.driver.find_element(*locator).click()
return "Dugme kliknuto"
# Upotreba
# driver = ... # Inicijalizacija drajvera
# page = PageObject(driver)
# page.click_button(("ID", "submit_button"))