SpringBoot 2.x、JUnit 5 扩展和 MongoClient

SpringBoot 2.x, JUnit 5 extension, and MongoClient

我正在尝试为 JUnit 5 编写一个扩展,我很好奇是否有办法让我接入 @SpringBootTest 已经为测试设置的 mongodb 连接。

因此,例如,我的扩展程序如下所示:

public class MyExtension implements BeforeTestExecutionCallback {

  @Override
  public void beforeTestExecution(ExtensionContext context) throws Exception {
    // How do I get at the MongoClient here (or in the class constructor)?
  }
}

当然,我可以创建一个新的,但我想重复使用 Spring 已经设置的那个,这样扩展程序就不必处理已知信息,例如 URI、身份验证凭据、等等

有什么想法吗?

SpringExtension class 提供了一种获取 ApplicationContext 与提供的 ExtensionContext 关联的方法。 然后你可以像这样从 ApplicationContext 中获取 bean:

public class MyExtension implements BeforeTestExecutionCallback {

    @Override
    public void beforeTestExecution(ExtensionContext context) throws Exception {
        ApplicationContext applicationContext = SpringExtension.getApplicationContext(context);
        MongoClient mongoClient = applicationContext.getBean(MongoClient.class);
    }
}