2015-12-21 64 views
1

我有一個類:我在哪裏實例化在構造函數中的webdriver實例如下java.lang.Exception的:測試類應該有且僅有一個公共的無參數的構造函數:

public class FunctionLibrary { 
    public WebDriver driver; 

    public FunctionLibrary(WebDriver driver) 
    { 
     driver = new FirefoxDriver(); 
     this.driver=driver; 
    } 

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

我訪問函數庫例如的webdriver在子類擴展超類:函數庫

public class Outlook extends FunctionLibrary{ 
    public Outlook(WebDriver driver) { 
     super(driver);  
    } 

    @Before 
    public void testSetUp() 
    { 
     getDriver().navigate().to("https://google.com"); 
    } 

    @After 
    public void closeTest() 
    { 
     getDriver().close(); 
    } 

    @Test 
    public void openOutlookAndCountTheNumberOfMails() 
    { 
     System.out.println("executed @Test Annotation");   
    } 
} 

當我執行上面這段代碼的JUnit 我得到錯誤的

java.lang.Exception的:測試類應該有且僅有一個公共的無參數的構造函數

任何人都可以讓我在哪裏,我錯了

+0

您沒有確切的一個公共零參數構造函數。你只有一個公共的單參數構造函數。你認爲構造函數參數'driver'來自哪裏? –

+0

順便說一句:沒有必要爲此使用繼承。使用組合。 –

+0

另外:你重寫傳遞給'FunctionLibrary'構造函數的'driver'的值。您目前不需要該參數;如果刪除參數(以及Outlook的構造函數的相應參數),問題將消失。 –

回答

3

沒有必要的參數傳遞到構造函數的FunctionLibrary,因爲你簡單地覆蓋它的值:

public class FunctionLibrary { 
    public WebDriver driver; 

    public FunctionLibrary() 
    { 
     this.driver=new FirefoxDriver(); 
    } 

    // etc. 
} 

此更改意味着你不需要傳遞參數從測試類:只是刪除它的構造。

1

您沒有公共的零參數構造函數。測試環境不知道要傳遞給它的構造函數,因爲您需要傳遞一個WebDriver對象。

public Outlook(WebDriver driver) { 
    super(driver); 
} 

在那裏,你想讓測試環境通過什麼?而應該像保留一個零參數構造函數一樣,並自己傳入一個WebDriver實例。像這樣的東西應該工作。

public Outlook() { 
    super(new FirefoxDriver());  
} 

希望這會有所幫助。

+0

謝謝大家,問題已解決 – Shilpa

2

您需要類的頂部@RunWith(Parameterized.class)。

如果您使用@Parameters正確,它將運行得很好。 :)

相關問題