Java 为什么JUnit5测试不从抽象类继承@Test注释?

Java 为什么JUnit5测试不从抽象类继承@Test注释?,java,junit,junit5,Java,Junit,Junit5,我刚刚意识到(在将遗留代码从JUnit4迁移到JUnit5时),我们的一些测试方法没有执行,因为它们没有@test注释。它们没有,因为它们重写了抽象超类(存在注释的地方)中的方法 我可以通过在每个方法中添加@Test来轻松解决这个问题。但我想知道这是否是故意的行为。它从JUnit4更改为5,但我在中或其他任何地方都找不到关于它的任何信息 根据,注释通常不是继承的。但在新的JUnit版本中,这似乎是故意更改的。(还是我遗漏了什么?) 抽象测试类 混凝土试验班 我想您正在尝试在测试方法之间建立某种关

我刚刚意识到(在将遗留代码从JUnit4迁移到JUnit5时),我们的一些测试方法没有执行,因为它们没有
@test
注释。它们没有,因为它们重写了抽象超类(存在注释的地方)中的方法

我可以通过在每个方法中添加
@Test
来轻松解决这个问题。但我想知道这是否是故意的行为。它从JUnit4更改为5,但我在中或其他任何地方都找不到关于它的任何信息

根据,注释通常不是继承的。但在新的JUnit版本中,这似乎是故意更改的。(还是我遗漏了什么?)

抽象测试类 混凝土试验班
我想您正在尝试在测试方法之间建立某种关系。如果可以使用
@Nested
,请尝试

这是JUnit 4和JUnit Jupiter之间无意的区别

详情请参阅


编辑:经过进一步调查,JUnit4中的这种(方便的)行为实际上是无意的。参见Sam在

上的最新评论,我真的不知道这将如何帮助创建与抽象超类类似的设置。至少在我的用例中,目标是在每个测试子类必须实现的
@beforeach
@AfterEach
方法和抽象方法中拥有一个带有公共夹具代码的超类。(因此,来自同一层次结构的许多类似类可以以统一的方式进行测试。)不一定是好的测试设计,但到目前为止,它仍然有效。
import org.junit.jupiter.api.Test;

abstract class AbstractJUnit5Test {

  @Test
  void generalTest() {
    System.out.println("This is a test in the abstract class");
  }

  @Test
  abstract void concreteTest();
}
import org.junit.jupiter.api.Test;

class ConcreteJUnt5Test extends AbstractJUnit5Test {

  // only gets executed with an additional @Test annotation:
  @Override
  void concreteTest() { 
    System.out.println("This is from the concrete test method.");
  }
}