Sobes.tech
Middle

Hol alkalmazható a Singleton tervezési minta az automatizált tesztelésben?

sobes.tech MI

Válasz az MI-től

Az autotesztekben a Singleton gyakran használatos az olyan erőforrások kezelésére, amelyeknek az egész tesztelési szekvencián keresztül egyedinek kell maradniuk.

Használati példák:

  • WebDriver kezelése: Annak biztosítása érdekében, hogy csak egy WebDriver példány legyen, amit az összes tesztosztály használ. Ez elkerüli a böngésző újra megnyitását/zárását, és megőrzi az állapotot a tesztlépések között.

    public class WebDriverSingleton {
        private static WebDriver instance;
    
        private WebDriverSingleton() {
            // Privát konstruktor az példányok létrehozásának megakadályozására
        }
    
        public static WebDriver getInstance() {
            if (instance == null) {
                // WebDriver inicializálása (pl. Chrome, Firefox)
                instance = new ChromeDriver();
            }
            return instance;
        }
    
        public static void quitDriver() {
            if (instance != null) {
                instance.quit();
                instance = null;
            }
        }
    }
    
    // Használat a tesztosztályban
    public class MyTests {
        @BeforeClass
        public void setup() {
            WebDriver driver = WebDriverSingleton.getInstance();
            // driver használata
        }
    
        @AfterClass
        public void tearDown() {
            WebDriverSingleton.quitDriver();
        }
        // Tesztmetódusok
    }
    
  • Adatbázis kapcsolat kezelése: Biztosítja, hogy csak egy aktív kapcsolat legyen az adatbázissal a tesztelés előfeltételeinek vagy adatellenőrzések végrehajtásához.

    public class DatabaseConnection {
        private static Connection instance;
    
        private DatabaseConnection() {
            // Privát konstruktor
        }
    
        public static Connection getInstance() {
            if (instance == null) {
                try {
                    // Kapcsolat létesítése az adatbázissal
                    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();
                }
            }
        }
    }
    
  • Konfigurációs fájl kezelése: A konfigurációs paraméterek betöltése a fájlból a teszt futásának elején, és egységes hozzáférés biztosítása.

    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("Sajnálom, nem található a 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);
        }
    }
    
  • Naplózás kezelése: Egyetlen logger példány a teszt futtatásának központosított naplózásához.

A Singleton használata segít az olyan erőforrások kezelésében, amelyeknek egyedinek kell lenniük, de óvatosan kell alkalmazni, különösen több szálon futó tesztkeretrendszerekben, ahol versenyhelyzeti hozzáférés és szinkronizációs problémák léphetnek fel. Ilyen esetekben összetettebb megközelítések, például a ThreadLocal használata lehet szükséges.