如何在其他测试中重复使用(包括)Junit测试块

时间:2013-02-14 16:00:10

标签: java selenium-webdriver junit4

我是JAVA世界的新手 - 来自ColdFusion背景 - 并且一直在学习Java,因为我正在学习Selenium WebDriver / 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”标签)登录代码,这样如果对登录页面功能进行了更改 - 我只需要在一个地方更改它。

3 个答案:

答案 0 :(得分:3)

Java没有像ColdFusion或C这样的词汇包含语句。这是设计原因,因为在编译之前粘贴源代码是一种在模块之间共享代码的非常不干净的方式。

但是还有很多其他方法可以解决这个问题。这是两个:

  1. 使用封装在方法中的常用功能创建自己的库,并在测试中使用此库
  2. 为您的测试类添加setUp and tearDown methods。这些方法在每个测试方法之前和之后执行。请注意,测试类可以相互继承。因此,当您有许多具有相同setUptearDown方法的测试类时,您可以使它们扩展一个公共基类并在基类中实现这些方法一次。

答案 1 :(得分:1)

您可以在基本父类中实现myLogin()功能,您需要在所有测试类中进行扩展,以便在各种测试中访问此功能:

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

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

答案 2 :(得分:0)

您可以使用@Before注释来完成此操作。带注释的方法将在每个@Test注释方法之前运行。同样,如果需要,您可以在每次单元测试后使用@After注销。