如何为 Micronaut 中的测试启用急切的单例初始化?
How to enable eager singleton initialization for tests in Micronaut?
我有一个案例,我有一个 @Factory
注释 class,它创建一个 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
}
}
所以当执行测试时,Config
class 中的 response
方法不会被调用,即使 eagerInitSingletons
已启用并且它在应用程序启动时起作用通常。
问题是:如何为 micronaut 测试启用急切的单例初始化?
您可以尝试使用自定义上下文生成器吗?
你的测试Class
@MicronautTest(contextBuilder = CustomContextBuilder.class)
您的 CustomContextBuilder:
public class CustomContextBuilder extends DefaultApplicationContextBuilder {
public CustomContextBuilder() {
eagerInitSingletons(true);
}
}
我有一个案例,我有一个 @Factory
注释 class,它创建一个 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
}
}
所以当执行测试时,Config
class 中的 response
方法不会被调用,即使 eagerInitSingletons
已启用并且它在应用程序启动时起作用通常。
问题是:如何为 micronaut 测试启用急切的单例初始化?
您可以尝试使用自定义上下文生成器吗?
你的测试Class
@MicronautTest(contextBuilder = CustomContextBuilder.class)
您的 CustomContextBuilder:
public class CustomContextBuilder extends DefaultApplicationContextBuilder {
public CustomContextBuilder() {
eagerInitSingletons(true);
}
}