0

Я новичок в Junit и тестировании фреймворков в целом, вот мой вопрос.Дизайнерские зависимости в JUnit Test Class

У меня есть следующий код:

public class Login extends WebsiteTestCase 
{ 
    @Test 
    public void testChromeLogin() 
    { 
     setDriver(getChromeDriver()); 
     login(getDriver()); 
    } 

    public void login(WebDriver driver) 
    { 
     driver.get(getBaseURL()); 

     WebElement username = driver.findElement(By.name("login_username")); 
     WebElement password = driver.findElement(By.name("login_password")); 
     WebElement submit = driver.findElement(By.cssSelector("form#login input")); 

     username.sendKeys(getUsername()); 
     password.sendKeys(getPassword()); 
     submit.submit(); 

     assertEquals("Website HomePage", driver.getTitle()); 
    } 

    @After 
    public void tearDown() throws Exception 
    { 
     getDriver().quit(); 
    } 
} 

и

public class WebsiteTestCase extends StockholmTestCase 
{ 
    public String username = "login", password_login = "password"; 
    private String baseURL = "http://website.com"; 

    public String getUsername() 
    { 
     return this.username; 
    } 

    public String getPassword() 
    { 
     return this.password_login; 
    } 

    public String getBaseURL() 
    { 
     return this.baseURL; 
    } 
} 

и

public class StockholmTestCase extends TestCase 
{ 
    private WebDriver driver; 

    public WebDriver getChromeDriver() 
    { 
     return new RemoteWebDriver(DesiredCapabilities.chrome()); 
    } 

    public WebDriver getFireFoxDriver() 
    { 
     return new RemoteWebDriver(DesiredCapabilities.firefox()); 
    } 

    public WebDriver getDriver() 
    { 
     return this.driver; 
    } 

    public void setDriver(WebDriver driver) 
    { 
     this.driver = driver; 
    } 
} 

Как вы можете видеть в WebsiteTestClass, я закодировав текущее имя пользователя для входа и пароль, и baseURL, который отлично работает для моих тестов. Но если я хочу «программно» установить среду для тестирования (возможно, для разных программистов разные логин, пароль, разные baseurl, ex: «http://Bob.dev.website.com»), вместо этого я хотел бы иметь возможность создать экземпляр WebsiteTestCase с разными свойства для учетных данных для входа, с конструктором.

как

public class Stockholm 
{ 
    public static void main(String args[]) 
    { 
     JUnitCore junit = new JUnitCore(); 
     Result result = junit.run(new Login(/* credentials here, settings */)); 
    } 
} 

в отличие от

public class Stockholm 
{ 
    public static void main(String args[]) 
    { 
     JUnitCore junit = new JUnitCore(); 
     Result result = junit.run(Login.class); 
    } 
} 

Я понимаю, в приведенном выше коде, что я не пропускании экземпляр Вход в junit.run, так как я бы разработать код для выполнения эти вещи в этом контексте?

ответ

2

В файле проекта может быть файл свойств, например webdriver-test-dev.properties и иметь учетные данные для входа & URL, определенный в нем. Вы можете загрузить этот файл свойств и ввести свойства во время теста.

Окружающая среда может передаваться как аргумент командной строки, такой как -Denv = dev, и используя это значение, файл свойств права может быть выбран с учетом имени файла, если из предопределенного формата, такого как webdriver-<env>.properties.

Кроме того, для связанного нет, для тестового примера лучше использовать один общий тестовый вход вместо того, чтобы каждый программист использовал свой собственный логин.

+0

Если я получаю все эти свойства, завернутые в экземпляр класса, например: Настройка веб-сайта = новый набор веб-сайтов (getSettingsFromFile (файл)); Как бы я вставлял этот объект в тест Junit? – SobiborTreblinka

+0

Вам не нужно вводить его в тест. Вы загружаете свойства для каждого тестового класса. – Prasanna