Otomatik testlerde Singleton tasarım deseni nerede uygulanabilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Otomatik testlerde Singleton, genellikle test oturumu boyunca tek örneğe sahip olması gereken kaynakların yönetimi için kullanılır.
Kullanım örnekleri:
-
WebDriver yönetimi: Tüm test sınıflarının kullanacağı tek bir WebDriver nesnesi örneği sağlamak. Bu, tarayıcıyı tekrar tekrar açıp kapamaktan kaçınmayı ve test adımları arasında durumu korumayı sağlar.
public class WebDriverSingleton { private static WebDriver instance; private WebDriverSingleton() { // Özel yapıcı, örnek oluşturmayı engeller } public static WebDriver getInstance() { if (instance == null) { // WebDriver başlatma (örneğin, Chrome, Firefox) instance = new ChromeDriver(); } return instance; } public static void quitDriver() { if (instance != null) { instance.quit(); instance = null; } } }// Test sınıfında kullanım public class MyTests { @BeforeClass public void setup() { WebDriver driver = WebDriverSingleton.getInstance(); // driver kullanımı } @AfterClass public void tearDown() { WebDriverSingleton.quitDriver(); } // Test metodları } -
Veritabanı bağlantısının yönetimi: Test ön koşulları veya veri doğrulamaları için yalnızca bir aktif veritabanı bağlantısının olmasını sağlar.
public class DatabaseConnection { private static Connection instance; private DatabaseConnection() { // Özel yapıcı } public static Connection getInstance() { if (instance == null) { try { // Veritabanı bağlantısı kur 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(); } } } } -
Yapılandırma dosyasının yönetimi: Test çalıştırılmadan önce yapılandırma parametrelerini dosyadan yükleme ve bunlara tek erişim sağlama.
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("Üzgünüz, config.properties bulunamadı"); 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); } } -
Log yönetimi: Merkezi log tutma için tek bir logger örneği.
Singleton kullanımı, benzersizliği gereken kaynakların yönetimine yardımcı olur, ancak özellikle çok iş parçacıklı test çerçevelerinde kullanırken dikkatli olunmalıdır; çünkü eşzamanlı erişim sorunları ve senkronizasyon ihtiyacı ortaya çıkabilir. Bu durumlarda, ThreadLocal kullanımı gibi daha karmaşık yaklaşımlar gerekebilir.