2013-02-14 99 views
0

我對JAVA世界相當陌生 - 來自ColdFusion背景 - 並且一直在學習Java,因爲我正在學習Selenium WebDriver/JUnit。我已經編寫了幾個測試類,用於測試遵循類似結構的管理功能。如何在其他測試中重新使用(包括)Junit測試塊

public class myclass{ 

public static WebDriver driver; 

@BeforeClass 
public static void startDriver(){ 
    driver = new FirefoxDriver(); 
    driver.get("some url"); 
} 

@Test 
public void myLogin(){ 

    some login code 

} 

@Test 
public void somefunction() { 

    other admin function to test 

} 

我的問題是這樣的 - 因爲我所有的測試要求用戶登錄 - 我最終不得不一遍又一遍地重複使用「mylogin」測試代碼。我如何編寫測試以簡單地「包含」(如ColdFusion中的「cfinclude」標籤)登錄代碼,以便如果對登錄頁面功能進行更改 - 我只需要在一個地方進行更改。

回答

1

您可以實現在基父類的myLogin()功能,用戶需要什麼,在所有測試類擴展到跨各種測試訪問此功能:如果您使用的是相當當前

public abstract class MyBaseTest { 
    public void myLogin() { 
     <some login code> 
    } 
} 

public class MyClass extends MyBaseTest { 
    @Test 
    public void somefunction() { 
     super.myLogin(); 
    } 
} 
+0

完美工作 - TYVM - 我忘記了「超類」的概念, – 2013-02-14 18:56:33

3

Java沒有像ColdFusion或C這樣的詞彙包含語句。這是設計的,因爲在編譯之前粘貼源代碼是在模塊之間共享代碼的非常不清楚的方式。

但還有很多其他方法可以解決這個問題。這裏有兩個:

  1. 與封裝的方法常用功能創建自己的庫,並使用這個庫在你的測試
  2. 添加setUp and tearDown methods你的測試類。這些方法在每個測試方法之前和之後執行。請注意,測試類可以相互繼承。所以當你有很多測試類與setUptearDown方法相同時,你可以讓它們擴展一個公共基類,並在基類中實現這些方法一次。
+1

版本的JUnit,你也可以看看Rules來提供類似的支持。 – cjstehno 2013-02-14 16:06:59

+0

你可以用'@ Before'註釋myLogin()以在每個'@ Test'方法之前執行(即將它視爲Set Up方法) – sbk 2013-02-14 16:09:41

0

您可以使用@Before註釋來完成此操作。註釋的方法將在每個@Test註釋的方法之前運行。同樣,如果需要,您可以在每個單元測試後使用@After註銷。