为什么JUnit 5测试不从抽象类inheritance@Test注释?
我刚刚意识到(在将遗留代码从JUnit 4迁移到JUnit 5时)我们的一些测试方法没有执行,因为它们没有@Test
注释。 他们没有它,因为它们覆盖了抽象超类(注释存在的地方)的方法。
我可以通过在每个方法中添加@Test
来轻松解决这个问题。 但我想知道这是否是预期的行为。 它从JUnit 4更改为5但我在官方JUnit5用户指南或其他任何地方都找不到任何相关内容。
根据这个问题 ,注释通常不会被inheritance。 但似乎在新的JUnit版本中故意改变了这一点。 (或者我错过了什么?)
抽象测试类
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."); } }
这是JUnit 4和JUnit Jupiter之间的无意识差异。
有关详细信息,请访问https://github.com/junit-team/junit5/issues/960
编辑:经过进一步调查后,似乎JUnit 4的这种(方便)行为实际上是无意的。 请参阅https://github.com/junit-team/junit5/issues/960#issuecomment-316114648上 Sam的最新评论
我想你正试图在你的测试方法之间建立某种关系。 尝试使用@Nested
。
你可以在这里找到一个样本