当前位置: 首页 > 知识库问答 >
问题:

如何使用JUnit5为项目中的所有测试初始化基类中的静态资源?

左丘季
2023-03-14

给定以下代码:

    public abstract class Base {

      @BeforeAll
      public static void beforeAll() {
        System.out.println("Base::beforeAll");
      }

      @AfterAll
      public static void afterAll() {
        System.out.println("Base::afterAll");
      }
    }

    public class First extends Base {

      @Test
      public void test() {
        System.out.println("First::test");
      }
    }

    public class Second extends Base {

      @Test
      public void test() {
        System.out.println("Second::test");
      }
    }

我希望有以下的执行模式:

    Base::beforeAll
    First::test
    Second::test
    Base::afterAll

相反,我得到的是:

    Base::beforeAll
    First::test
    Base::afterAll

    Base::beforeAll
    Second::test
    Base::afterAll

我知道BeforeAllCallbackAfterAllCallback,但它们只是为生命周期注释提供了回调挂钩,如BeforeAllAfterAll

在运行项目中的所有测试之前,是否有任何方法可以安全地在基类中运行setup方法,然后在运行整个项目中的所有测试方法之后运行一些分解方法?

共有1个答案

淳于煌
2023-03-14

看起来您可以使用BeforeCallbackExecttionContext的组合来实现这种行为:https://stackoverflow.com/a/51556718/11692167

 类似资料:
  • 我正在开发我的第一个 Swing 应用程序,现在提出了一个难题:在静态初始化期间或开始实际执行后执行引导和资源初始化。我是什么意思...我有单例: 因此,方法如下所示 或者,也许我在启动后手动初始化资源,然后运行它。逻辑上正确的方式是什么?

  • 问题内容: 该命令仅覆盖一个目录中的文件。 我想要整个项目,这意味着测试应覆盖dir中的所有文件以及该dir下的所有千岁树dir 。 这样做的命令是什么? 问题答案: 这应该在当前目录及其所有子目录中运行所有测试: 这应该针对给定的特定目录运行所有测试: 这应该以前缀为的导入路径运行所有测试: 这应该运行所有带有前缀的测试导入路径: 这应该在$ GOPATH中运行所有测试:

  • 问题内容: 当我试图写这样的东西: 编译器无法编译它。 但是当我写这样的东西时: 并反编译后,我看到了静态初始化: 您能否向我解释这种行为? 问题答案: 您可以具有静态初始化,但不能具有静态块。静态初始化需要静态代码块来实现的事实确实改变了Java语法。 关键是您不打算在接口中包含代码(在Java 8之前),但是可以初始化字段。 顺便说一句,您可以拥有一个嵌套的类或枚举,该类或枚举具有您想要的尽可

  • 问题内容: Kotlin 中的静态初始化块等效于什么? 我了解Kotlin的设计宗旨是不带静电。我正在寻找具有等效语义的东西-首次加载该类时,代码将运行一次。 我的特定用例是,我想从Android AppCompat库启用DayNight功能,并且说明要求将一些代码放入类的静态初始化块中。 问题答案: 从某种角度看,Kotlin中的s等同于Java类的静态部分。特别是,它们是在首次使用类之前初始化

  • 当一个类本身有一个静态实例时,我很难理解初始化顺序。另外,为什么

  • 结果将是: 我对这个结果感到困惑,因为根据标准规则,不是静态初始化,是静态初始化,因为这些: 变量或临时对象o的常量初始值设定项是其完全表达式为常量表达式的初始值设定项,但如果o是对象,则这样的初始值设定项也可以为o及其子对象调用constexpr构造函数,即使这些对象是非文字类类型。 如果实体的常量初始值设定项初始化具有静态或线程存储持续时间的变量或临时对象,则执行常量初始化。如果不执行常量初始