当前位置: 首页 > 知识库问答 >
问题:

如何在Micronaut中为测试启用即时单例初始化?

颜新
2023-03-14

我有一个例子,我有一个@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
    }

}

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

问题是:如何为micronaut测试启用热切的单例初始化?

共有1个答案

丰佐
2023-03-14

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

你的测试类

@MicronautTest(contextBuilder = CustomContextBuilder.class)

您的CustomContextBuilder:

public class CustomContextBuilder extends DefaultApplicationContextBuilder {

    public CustomContextBuilder() {
        eagerInitSingletons(true);
    }
}
 类似资料:
  • 但它会抛出以下错误: 那么如何让这个库在单元测试中工作呢?

  • 我在测试用例中提交了一个网络请求,但这有时需要超过2秒(默认超时)。 如何增加单个测试用例的超时?

  • 同步模式的读写测试,使用Simple Producer & Simple Consumer 备注: 1台客户机,8台Talos机器,8台Hdfs,8台HBase,Talos与Hdfs/HBase混布,机型均为2U; 读写同步,每个partition对应一个线程; ThroughPut指的是client出口/入口带宽; QPS是集群整体处理能力,非单台serverQPS 场景一:只写,batch=1

  • 在JUnit4下,我有一个测试套件,它使用注释来引导框架。这是能够在测试期间构造某些对象所必需的。它还将一些任意应用程序属性加载到静态中。这些通常特定于当前测试套件,并且将被整个套件中的众多测试使用。我的测试套件看起来像这样(其中FrameworkResources扩展了ExternalResources并做了很多引导工作): 上面的工作非常好,主构建执行所有测试套件及其各自的测试用例(?)没有问

  • 我的项目的设置是- 用于持久化的Spring JDBC 下面是我的应用程序的日志,它捕获了与数据库的交互。 日志中有两件事是清楚的- 连接池仅在收到执行查询的第一个请求时才开始创建连接 一个包含4个连接的池需要将近30秒的时间来初始化 我的问题是- 如何配置DBCP在启动时自动初始化? 创建连接真的需要那么长时间吗? 注意:请不要建议切换到C3P0或Tomcat连接池。我知道这些解决方案。我更感兴

  • 问题内容: 我有一个使用Angular Translate的应用程序(https://github.com/PascalPrecht/angular- translate )。Translate在浏览器中的应用程序中工作得很好,但是当我尝试测试任何控制器时,我得到 错误:意外的请求:GET locale / locale-en.json 。由于在启动时会翻译GET请求以获得语言文件,因此如何对控制