Sobes.tech
Middle

Czym jest dekorator w kontekście programowania?

sobes.tech AI

Odpowiedź od AI

Dekorator jest wzorcem strukturalnego projektowania, który umożliwia dynamiczne dodawanie nowych obowiązków obiektom, opakowując je w specjalne obiekty-dekoratory. Stanowi on bardziej elastyczną alternatywę dla dziedziczenia w celu rozszerzenia funkcjonalności.

Kluczowe idee:

  • Otaczanie: Dekorator zawiera odniesienie do otaczanego obiektu.
  • Delegacja: Dekorator deleguje wywołania metod do otaczanego obiektu, mogąc wykonywać dodatkową logikę przed lub po wywołaniu.
  • Rozszerzanie funkcjonalności: Pozwala na dodanie zachowań do obiektów bez zmiany ich struktury lub użycia podklas.

Zastosowanie w QA Automation:

  • Logowanie działań: Dodanie logowania do metod interakcji z elementami strony.
  • Obsługa wyjątków: Dodanie uniwersalnej obsługi wyjątków do wywołań funkcji.
  • Ponowne próby: Implementacja mechanizmu ponawiania wykonania flaky testów lub działań.
  • Wstrzykiwanie warunków pre/post: Wykonywanie określonych działań przed lub po głównym kroku testu.

Przykład w Pythonie:

def log_method_call(func):
    # Dekorator logujący wywołanie funkcji
    def wrapper(*args, **kwargs):
        print(f"Wywołanie funkcji: {func.__name__} z args: {args}, kwargs: {kwargs}")
        result = func(*args, **kwargs)
        print(f"Funkcja {func.__name__} zwróciła: {result}")
        return result
    return wrapper

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

    @log_method_call
    def click_button(self, locator):
        # Metoda korzystająca z dekoratora
        print(f"Kliknięcie elementu zlokalizowanego przez: {locator}")
        # Symulacja działania drivera
        # self.driver.find_element(*locator).click()
        return "Przycisk kliknięty"

# Użycie
# driver = ... # Inicjalizacja drivera
# page = PageObject(driver)
# page.click_button(("ID", "submit_button"))