覆盖JUnit注释?

时间:2014-08-20 23:59:44

标签: java junit annotations

我有一个我在超类中调用的方法,如下所示:

public class superClass {
  @Before
  void createDriver(){
    driverFactory = new FirefoxDriverFactory();
  }
  ...
}

但是,在我的测试套件中,特别是继承自超类的测试套件,我想要它,以便我可以使用@BeforeClass注释而不是@Before注释来运行我的测试。我不确定,但是否可以覆盖@Before注释?我尝试了以下方法:

public class derivedClass extends superClass{
  @Override
  @BeforeClass
  void createDriver(){
    driverFactory = new FirefoxDriverFactory();
  }
}

但是我收到一条错误,指出createDriver()方法必须是静态的,我必须删除@Override注释。是否可以覆盖注释而不是函数?我只是想知道。谢谢!

2 个答案:

答案 0 :(得分:1)

问题不在于注释覆盖。 JUnit要求@BeforeClass方法是静态的:

public class derivedClass extends superClass{

  @BeforeClass
  public static void beforeClass(){
   driverFactory = new FirefoxDriverFactory();
  }
}

答案 1 :(得分:1)

我认为这是你可能正在寻找的......

public class superClass {
  @Before
  void createDriver(){
    driverFactory = new FirefoxDriverFactory();
  }
  ...
}

public class derivedClass extends superClass{
  @Override
  void createDriver(){
    driverFactory = new FirefoxDriverFactory();
  }
}

JUnit应该通过注释找到superClass.createDriver()。但是,在derivedClass的实例上调用此方法时,应该运行的实际方法是derivedClass.createDriver(),因为此方法会使另一个方法重载。试一试,告诉我们。