【问题标题】:Override a JUnit annotation?覆盖 JUnit 注释?
【发布时间】:2014-08-20 23:59:43
【问题描述】:

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

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 注释。是否可以覆盖注释而不是函数?我只是想知道。谢谢!

【问题讨论】:

标签: java junit annotations


【解决方案1】:

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

public class derivedClass extends superClass{

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

【讨论】:

  • 这仅在 OP 正常且两种方法都被调用的情况下才有效。我相信问题是让derivedClass 的方法重载superClass 的。
  • 是的,你可以重写 super 方法,JUnit 会调用它。但是您不能将 @BeforeClass 注释放在重载方法上。 JAVA 编译器没问题,但是 JUnit 要求是用 @BeforeClass 注释的方法应该是静态的。
  • 我的观点是,如果 OP 想要覆盖该行为,正确的解决方案是不修复 @BeforeClass 的使用。
【解决方案2】:

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

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(),因为此方法会重载另一个方法。试试看,让我们知道。

【讨论】:

    猜你喜欢
    • 2011-12-08
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多