簡體   English   中英

在JUnit Test Class中設計依賴項

[英]Design dependencies in JUnit Test Class

我是Junit的新手並且測試框架一般,這是我的問題。

我有以下代碼:

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,例如:“ 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 );
    }
}

我在上面的代碼中理解我沒有將Login的實例傳遞給junit.run,那么我將如何在這種情況下設計代碼來完成這些事情呢?

您可以在項目中擁有屬性文件,例如webdriver-test-dev.properties並在其中定義登錄憑據和URL。 您可以在測試期間加載該屬性文件並注入屬性。

環境可以像-Denv = dev一樣作為命令行參數傳遞,並且使用此值可以考慮文件名來選擇正確的屬性文件,如果是webdriver-<env>.properties這樣的預定義格式。

另外,對於測試用例,最好使用一個常見的測試登錄,而不是讓每個程序員使用他或她自己的登錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM