Kde lze v automatizovaném testování použít vzor Singleton?
sobes.tech AI
Odpověď od AI
V automatizovaném testování je Singleton často používán k řízení zdrojů, které musí být během celé testovací relace jedinečné.
Příklady použití:
-
Správa WebDriver: Zajištění, že existuje pouze jedna instance objektu WebDriver, kterou používají všechny testovací třídy. To zabrání opětovnému otevírání/zavírání prohlížeče a zachová stav mezi kroky testu.
public class WebDriverSingleton { private static WebDriver instance; private WebDriverSingleton() { // Soukromý konstruktor, který zabraňuje vytváření instancí } public static WebDriver getInstance() { if (instance == null) { // Inicializace WebDriver (např. Chrome, Firefox) instance = new ChromeDriver(); } return instance; } public static void quitDriver() { if (instance != null) { instance.quit(); instance = null; } } }// Použití ve třídě testu public class MyTests { @BeforeClass public void setup() { WebDriver driver = WebDriverSingleton.getInstance(); // Použití driver } @AfterClass public void tearDown() { WebDriverSingleton.quitDriver(); } // Testovací metody } -
Správa připojení k databázi: Zajištění, že existuje pouze jedno aktivní spojení s databází pro provádění předpokladů testu nebo kontrol dat.
public class DatabaseConnection { private static Connection instance; private DatabaseConnection() { // Soukromý konstruktor } public static Connection getInstance() { if (instance == null) { try { // Navázání spojení s databází 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(); } } } } -
Správa konfiguračního souboru: Načítání konfiguračních parametrů ze souboru na začátku běhu testu a zajištění jednotného přístupu k nim.
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("Omlouváme se, soubor config.properties nebyl nalezen"); 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); } } -
Správa logování: Jednotný instance loggeru pro centralizované vedení logů během testovacího běhu.
Použití Singleton pomáhá spravovat zdroje, které musí být jedinečné, avšak je třeba být opatrný při jeho použití, zejména v vícevláknových testovacích rámcích, kde může dojít ke konfliktům při přístupu a nutnosti synchronizace. V takových případech mohou být potřeba složitější přístupy, například použití ThreadLocal.