如何在“SpringBootContextLoader”中有一个“@Autowired”对象?

如何在“SpringBootContextLoader”中有一个“@Autowired”对象?,spring,spring-boot,Spring,Spring Boot,我有以下资料: @Configuration public class ConsorsCrucibleTestsConfiguration { public AtomicReference<Functions.FailableFunction<MergedContextConfiguration, ApplicationContext, Exception>> crucibleApplicationContextFunction() { return new

我有以下资料:

@Configuration
public class ConsorsCrucibleTestsConfiguration {
  public AtomicReference<Functions.FailableFunction<MergedContextConfiguration, ApplicationContext, Exception>> crucibleApplicationContextFunction() {
    return new AtomicReference<>(null);
  }

但当使用applicationContextFunction时,它是空的。有没有办法将其注入到上下文加载器中?

在应用程序中进行依赖项注入之前,会创建上下文加载器。如果使用断点,您将看到在传递ConsorsCrucibleTestsConfiguration bean方法之前先传递到SettableApplicationContextLoader


你到底想达到什么目的?也许这是一个更好的开始。

我们有一个运行功能测试的应用程序。如果功能测试正在应用程序中运行,则应使用其ApplicationContext。否则,它应该使用SpringBootTest通常创建的任何内容。我们已经有了一些使用静态成员的工作。我希望静电能以某种方式被注射所取代。我想没有办法设置特定于上下文加载器的配置?嗯。。。您试图同时运行测试和应用程序,并且希望重用应用程序上下文。为什么?因为你不能同时启动两个?你和港口有冲突吗?检查注释@SpringBootTest,如果您正在运行web应用程序,您可以使用不同的端口。我们希望应用程序运行测试,以便测试运行可以在实例之间分布。我们希望能够独立运行测试以简化开发,即不必在每次更新测试时启动/重新启动应用程序,并且可以直接在IDE中运行测试,而不是通过应用程序的炫耀UI。如果不设置测试的加载程序,以便应用程序可以设置要使用的应用程序上下文,则测试在从应用程序运行时无法找到应用程序上下文。在我看来,您有两个需求,因此有两个独立的应用程序:主应用程序,在生产环境中运行,在开发时可以测试;第二个是进行分布式测试,这是一个完全不同的应用程序。我会制作一个完整的其他应用程序来进行如此复杂的测试。我们有两个应用程序,测试中的服务和测试运行程序。测试运行程序将对测试中的服务运行测试。我们还可以在两个上下文中运行测试:1。在这种情况下,测试可以只使用其ApplicationContext 2。直接来自IDE,测试无法在其中使用测试运行程序的ApplicationContext
public class SettableApplicationContextLoader extends SpringBootContextLoader {
  public class SettableApplicationContextLoader extends SpringBootContextLoader {
  @Autowired
  private AtomicReference<FailableFunction<MergedContextConfiguration, ApplicationContext, Exception>> applicationContextFunction;

  // use `applicationContextFunction`
}
@SpringBootTest
@ContextConfiguration(loader = SettableApplicationContextLoader.class)
class CucumberStepsBase {
}