Sobes.tech
Middle

Автоматташтырылган тестирүүдө Singleton дизайн үлгүсүн кай колдонсо болот?

sobes.tech AI

AIден жооп

Автоматтык тестирлөөдө 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("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);
        }
    }
    
  • Логгингти башкаруу: Тесттин жүрүшүн борборлоштурган логгердин бир үлгүсү.

Singleton ресурстарды башкарууда жардам берет, бирок анын көптөгөн агымдуу тест чөйрөлөрүндө колдонулушу учурда атаандаштыкка жана синхрондоштурууга муктаждык пайда болушу мүмкүн. Мындай учурларда, ThreadLocal сыяктуу татаал ыкмалар колдонулушу мүмкүн.