Gde u automatizovanom testiranju može da se primeni Singleton obrazac?
sobes.tech АИ
Одговор од АИ
У аутоматском тестирању, Singleton се често користи за управљање ресурсима који морају бити јединствени током целе тестне сесије.
Примери употребе:
-
Управљање WebDriver-ом: Да се обезбеди да постоји само један примерак објекта WebDriver, који користе све тестне класе. Ово спречава поновно отварање/затварање прегледача и одржава стање између корака теста.
public class WebDriverSingleton { private static WebDriver instance; private WebDriverSingleton() { // Приватни конструктор за спречавање стварања примерака } public static WebDriver getInstance() { if (instance == null) { // Иницијализација WebDriver-а (нпр. Chrome, Firefox) instance = new ChromeDriver(); } return instance; } public static void quitDriver() { if (instance != null) { instance.quit(); instance = null; } } }// Коришћење у тест класи public class MyTests { @BeforeClass public void setup() { WebDriver driver = WebDriverSingleton.getInstance(); // Коришћење driver-а } @AfterClass public void tearDown() { WebDriverSingleton.quitDriver(); } // Тест методе } -
Управљање везом са базом података: Гаранција да постоји само једна активна веза са базом података за извођење предуслова или провере података.
public class DatabaseConnection { private static Connection instance; private DatabaseConnection() { // Приватни конструктор } public static Connection getInstance() { if (instance == null) { try { // Успостављање везе са базом података instance = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "user", "password"); } catch (SQLException e) { e.printStackTrace(); } } return instance; } public static void closeConnection() { if (instance != null) { try { instance.close(); instance = null; } catch (SQLException e) { e.printStackTrace(); } } } }// Управљање конфигурационим фајлом import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ConfigurationManager { private static ConfigurationManager instance; private Properties properties; private ConfigurationManager() { properties = new Properties(); try (InputStream input = getClass().getClassLoader().getResourceAsStream("config.properties")) { if (input == null) { System.out.println("Жао нам је, не можемо пронаћи config.properties"); return; } properties.load(input); } catch (IOException ex) { ex.printStackTrace(); } } public static ConfigurationManager getInstance() { if (instance == null) { instance = new ConfigurationManager(); } return instance; } public String getProperty(String key) { return properties.getProperty(key); } }// Управљање логовањем public class Logger { private static Logger instance; private Logger() { // приватни конструктор } public static Logger getInstance() { if (instance == null) { instance = new Logger(); } return instance; } public void log(String message) { // логика за вођење дневника } }
Коришћење Singleton помаже у управљању ресурсима који морају бити јединствени, али треба бити опрезан у његовој употреби, посебно у мулти-тредним тест оквирима, где може доћи до проблема са конкуренцијским приступом и потребом за синхронизацијом. У таквим случајевима могу бити потребни сложенији приступи, као што је коришћење ThreadLocal.