Sobes.tech
Middle+

Koji obrazac smatraš najvažnijim nakon Page Object?

sobes.tech АИ

Одговор од АИ

Фабрички метод.

Он омогућава креирање објеката без навођења конкретне класе у коду клијента. Ово је важно за флексибилност и проширивост аутоматских тестова, на пример, при раду са различитим прегледачима или платформама.

Пример коришћења у контексту аутоматизације:

Замислите да имамо интерфејс WebDriverFactory и његове имплементације за различите прегледаче (ChromeWebDriverFactory, FirefoxWebDriverFactory). Фабрички метод омогућава добијање одговарајућег примерака драйвера, без коришћења условних конструкција (if/else) у тест коду.

// Интерфејс фабрике
interface WebDriverFactory {
    WebDriver createDriver();
}

// Имплементација за Chrome
class ChromeWebDriverFactory implements WebDriverFactory {
    @Override
    public WebDriver createDriver() {
        WebDriverManager.chromedriver().setup();
        return new ChromeDriver();
    }
}

// Имплементација за Firefox
class FirefoxWebDriverFactory implements WebDriverFactory {
    @Override
    public WebDriver createDriver() {
        WebDriverManager.firefoxdriver().setup();
        return new FirefoxDriver();
    }
}

// Коришћење фабрике у тесту
public class BaseTest {
    protected WebDriver driver;

    @BeforeMethod
    public void setupTest() {
        WebDriverFactory factory = getWebDriverFactory("chrome"); // Добити одговарајућу фабрику (имплементација може бити различита)
        driver = factory.createDriver(); // Креирати драйвер преко фабрике
        driver.manage().window().maximize();
    }

    private WebDriverFactory getWebDriverFactory(String browser) {
        if ("chrome".equalsIgnoreCase(browser)) {
            return new ChromeWebDriverFactory();
        } else if ("firefox".equalsIgnoreCase(browser)) {
            return new FirefoxWebDriverFactory();
        }
        throw new IllegalArgumentException("Неподржани прегледач: " + browser);
    }

    @AfterMethod
    public void tearDownTest() {
        if (driver != null) {
            driver.quit();
        }
    }
}

Предности:

  • Ниска повезаност: Клијентски код зависи само од интерфејса фабрике, а не од конкретних имплементација.
  • Проширивост: Лако додавање подршке новом прегледачу, креирањем нове фабрике и изменом методе getWebDriverFactory.
  • Изолација: Логика креирања објекта је концентрисана на једном месту (фабрици), што олакшава одржавање.