Sobes.tech
Middle

Wat is een decorator in de context van programmeren?

sobes.tech AI

Antwoord van AI

De decorator is een structureel ontwerppatroon dat het mogelijk maakt om dynamisch nieuwe verantwoordelijkheden aan objecten toe te voegen door ze te omhullen in speciale decorator-objecten. Het biedt een flexibel alternatief voor erfelijkheid om functionaliteit uit te breiden.

Kernideeën:

  • Omhulling: De decorator bevat een verwijzing naar het omhullende object.
  • Delegatie: De decorator delegeert methodooproepen naar het omhullende object en kan extra logica uitvoeren vóór of na de oproep.
  • Uitbreiding van functionaliteit: Maakt het mogelijk om gedrag toe te voegen aan objecten zonder hun structuur te wijzigen of subklassen te gebruiken.

Toepassing in QA Automation:

  • Loggen van acties: Toevoegen van logging aan methoden die interactie hebben met pagina-elementen.
  • Foutafhandeling: Toevoegen van universele foutafhandeling aan functiekoppen.
  • Herhaalpogingen: Implementatie van een mechanisme voor herhaalde pogingen bij flaky tests of acties.
  • Injectie van pre/post-voorwaarden: Uitvoeren van specifieke acties vóór of na de hoofdteststap.

Voorbeeld in Python:

def log_method_call(func):
    # Decorator die het aanroepen van de functie logt
    def wrapper(*args, **kwargs):
        print(f"Aanroep van functie: {func.__name__} met args: {args}, kwargs: {kwargs}")
        result = func(*args, **kwargs)
        print(f"Functie {func.__name__} gaf terug: {result}")
        return result
    return wrapper

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

    @log_method_call
    def click_button(self, locator):
        # Methode die decorator gebruikt
        print(f"Klikken op element gelokaliseerd door: {locator}")
        # Simulatie van driveractie
        # self.driver.find_element(*locator).click()
        return "Knop geklikt"

# Gebruik
# driver = ... # Initialisatie van driver
# page = PageObject(driver)
# page.click_button(("ID", "submit_button"))