如何为 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);
    }
}