在 JUnit 5 中,如何在所有测试之前运行代码

新手上路,请多包涵

@BeforeAll 注释标记了一个在 中的所有测试之前运行的方法。

http://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations

但是有没有办法在所有类的 所有 测试之前运行一些代码?

我想确保测试使用一组特定的数据库连接,并且必须 运行 任何 测试之前对这些连接进行全局一次性设置。

原文由 Rob N 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 700
1 个回答

这现在可以在 JUnit5 中通过创建自定义扩展来实现,您可以从中在根测试上下文上注册关闭挂钩。

你的扩展看起来像这样;

 import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import static org.junit.jupiter.api.extension.ExtensionContext.Namespace.GLOBAL;

public class YourExtension implements BeforeAllCallback, ExtensionContext.Store.CloseableResource {

    private static boolean started = false;

    @Override
    public void beforeAll(ExtensionContext context) {
        if (!started) {
            started = true;
            // Your "before all tests" startup logic goes here
            // The following line registers a callback hook when the root test context is shut down
            context.getRoot().getStore(GLOBAL).put("any unique name", this);
        }
    }

    @Override
    public void close() {
        // Your "after all tests" logic goes here
    }
}

然后,任何需要至少执行一次的测试类都可以注释为:

 @ExtendWith({YourExtension.class})

当您在多个类上使用此扩展时,启动和关闭逻辑将只被调用一次。

原文由 Philipp Gayret 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题