13

我刚刚意识到(在将遗留代码从 JUnit 4 迁移到 JUnit 5 时)我们的一些测试方法没有被执行,因为它们没有@Test注释。他们没有它,因为它们覆盖了抽象超类(存在注释的地方)的方法。

@Test我可以通过在每种方法中添加 来轻松解决此问题。但我想知道这是否是预期的行为。它从 JUnit 4 更改为 5,但我在官方 JUnit5 用户指南或其他任何地方都找不到任何关于它的信息。

根据这个问题,注释通常不会被继承。但似乎这是在新的 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.");
  }
}
4

2 回答 2

10

这是 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 的最新评论

于 2017-07-18T11:59:44.413 回答
0

我想您正试图在您的测试方法之间建立某种关系。试试看能不能用@Nested
你可以在这里找到一个样本

于 2017-07-18T09:34:52.810 回答