如何为Micronaut中的测试启用急切的单例初始化?



我有一个@Factory注释类,它创建了一个bean并调用了一些代码。我已经启用了即时单例初始化和即使在启动应用程序时没有在任何地方使用Bean工厂方法,也会调用它。但是,对于测试,急于初始化不起作用,并且不会创建bean:

应用程序:

public class Application {
public static void main(String[] args) {
Micronaut.build(args)
.eagerInitSingletons(true)
.mainClass(Application.class)
.start();
}
}

设置
@Factory
public class Config {
@Singleton
@Bean
public Response response() {
System.out.println("Invoked");
//invoking some code
return new Response("test");
}
}

和测试:

@MicronautTest(application = Application.class)
class ApplicationSpec extends Specification {
@Inject
EmbeddedApplication<?> application
void 'test it works'() {
expect:
application.running
}
}

因此,当执行测试时,即使启用了eagerInitSingletons,也不会调用Config类中的response方法,并且当应用程序正常启动时它会工作。

问题是:如何启用微航天员测试的急切单例初始化?

您可以尝试使用自定义上下文构建器吗?

YourTest类

@MicronautTest(contextBuilder = CustomContextBuilder.class)
你CustomContextBuilder:

public class CustomContextBuilder extends DefaultApplicationContextBuilder {
public CustomContextBuilder() {
eagerInitSingletons(true);
}
}

最新更新