Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在其他测试中重用(包括)Junit测试块_Java_Selenium Webdriver_Junit4 - Fatal编程技术网

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

Java 如何在其他测试中重用(包括)Junit测试块,java,selenium-webdriver,junit4,Java,Selenium Webdriver,Junit4,我对JAVA世界相当陌生——来自ColdFusion背景——一直在学习JAVA,因为我正在学习SeleniumWebDriver/JUnit。我已经编写了几个测试类来测试遵循类似结构的管理功能 public class myclass{ public static WebDriver driver; @BeforeClass public static void startDriver(){ driver = new FirefoxDriver(); driver.get("so

我对JAVA世界相当陌生——来自ColdFusion背景——一直在学习JAVA,因为我正在学习SeleniumWebDriver/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”标记)登录代码,以便在对登录页面功能进行更改时,我只需在一个地方进行更改。

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

但是还有很多其他的方法来解决这个问题。这里有两个:

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

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

    但是还有很多其他的方法来解决这个问题。这里有两个:

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

  • 您可以使用注释来实现这一点。带注释的方法将在每个@Test带注释的方法之前运行。类似地,如果需要,您可以在每次单元测试后使用注销。

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

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

    public abstract class MyBaseTest {
        public void myLogin() {
            <some login code>
        }
    }
    
    public class MyClass extends MyBaseTest {
        @Test
        public void somefunction() {
            super.myLogin();
        }
    }
    
    公共抽象类MyBaseTest{
    公共void myLogin(){
    }
    }
    公共类MyClass扩展了MyBaseTest{
    @试验
    公共函数(){
    super.myLogin();
    }
    }
    
    您可以在基本父类中实现myLogin()功能,您需要在所有测试类中扩展该功能,以便在各种测试中访问该功能:

    public abstract class MyBaseTest {
        public void myLogin() {
            <some login code>
        }
    }
    
    public class MyClass extends MyBaseTest {
        @Test
        public void somefunction() {
            super.myLogin();
        }
    }
    
    公共抽象类MyBaseTest{
    公共void myLogin(){
    }
    }
    公共类MyClass扩展了MyBaseTest{
    @试验
    公共函数(){
    super.myLogin();
    }
    }
    
    如果您使用的是相当新版本的JUnit,您还可以查看规则以提供类似的支持。如果您使用的是相当新版本的JUnit,您可以在
    @Before
    之前注释myLogin(),使每个
    @Test
    方法之前执行(即将其视为设置方法),您还可以查看规则以提供类似的支持。您可以使用
    @Before
    注释myLogin(),以使每个
    @Test
    方法(即将其视为一个设置方法)都能完美执行-TYVM-我忘了“超类”的概念可以完美执行-TYVM-我忘了“超类”的概念