Waar kan het Singleton-ontwerppatroon worden toegepast in geautomatiseerde tests?
sobes.tech AI
Antwoord van AI
In autotests wordt Singleton vaak gebruikt om resources te beheren die tijdens de hele testsessie slechts één exemplaar mogen hebben.
Voorbeelden van gebruik:
-
Beheer van WebDriver: Om een enkel WebDriver-voorbeeld te garanderen dat door alle testklassen wordt gebruikt. Dit voorkomt herhaald openen/sluiten van de browser en behoudt de status tussen teststappen.
public class WebDriverSingleton { private static WebDriver instance; private WebDriverSingleton() { // Privé constructor om het maken van instanties te voorkomen } public static WebDriver getInstance() { if (instance == null) { // Initialiseer WebDriver (bijv. Chrome, Firefox) instance = new ChromeDriver(); } return instance; } public static void quitDriver() { if (instance != null) { instance.quit(); instance = null; } } }// Gebruik in testklasse public class MyTests { @BeforeClass public void setup() { WebDriver driver = WebDriverSingleton.getInstance(); // Gebruik driver } @AfterClass public void tearDown() { WebDriverSingleton.quitDriver(); } // Testmethoden } -
Beheer van databaseverbinding: Garantie dat er slechts één actieve verbinding met de database is voor het uitvoeren van testvoorwaarden of datavalidaties.
public class DatabaseConnection { private static Connection instance; private DatabaseConnection() { // Privé constructor } public static Connection getInstance() { if (instance == null) { try { // Maak verbinding met database 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(); } } } } -
Beheer van configuratiebestand: Laden van configuratieparameters uit een bestand aan het begin van de testuitvoering en centrale toegang tot deze parameters.
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("Sorry, unable to find 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); } } -
Beheer van logging: Een enkel loggertype voor gecentraliseerd logbeheer tijdens de testuitvoering.
Het gebruik van Singleton helpt bij het beheren van resources die uniek moeten zijn, maar moet voorzichtig worden toegepast, vooral in multithreaded testframeworks waar gelijktijdige toegang en synchronisatieproblemen kunnen ontstaan. In dergelijke gevallen kunnen complexere benaderingen nodig zijn, zoals het gebruik van ThreadLocal.