2013-02-14 52 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注销。