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 օգտագործումը։