簡體   English   中英

如何為 Micronaut 中的測試啟用 Eager singleton 初始化?

[英]How to enable eager singleton initialization for tests in Micronaut?

我有一個案例,我有一個帶有@Factory注釋的 class ,它創建了一個 bean 並調用了一些代碼。 我已經啟用了 Eager singleton 初始化,並且調用了 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 class 的response方法,並且在應用程序正常啟動時它會起作用。

問題是:如何為 micronaut 測試啟用 Eager singleton 初始化?

您可以嘗試使用自定義上下文構建器嗎?

YourTest Class

@MicronautTest(contextBuilder = CustomContextBuilder.class)

您的 CustomContextBuilder:

public class CustomContextBuilder extends DefaultApplicationContextBuilder {

    public CustomContextBuilder() {
        eagerInitSingletons(true);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM