0

我对 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”标签)登录代码,以便如果对登录页面功能进行更改 - 我只需在一个地方进行更改。

4

3 回答 3

3

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

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

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

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

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

public class MyClass extends MyBaseTest {
    @Test
    public void somefunction() {
        super.myLogin();
    }
}
于 2013-02-14T16:08:57.973 回答
0

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

于 2013-02-14T16:04:32.577 回答