【问题标题】:Can I inject dependencies inside a custom Spring TestExecutionListener?我可以在自定义 Spring TestExecutionListener 中注入依赖项吗?
【发布时间】:2017-06-08 11:41:57
【问题描述】:

我认为标题非常具体,但我会分享一些我正在做的事情的背景。

我正在构建 TestExecutionListener 接口的实现,以便为我的测试抽象一些常见的数据库操作。

我遇到的问题是我需要将在侦听器内部配置的对象公开给实际的单元测试器。

我可以通过从 TestExecutionListener 操作上下文并添加一个新的单例 bean 来做到这一点(这不起作用)。

或者,我可以尝试将公共对象移动到其他地方,但是我需要将定位器对象注入到单元测试和侦听器中。自动装配似乎在那里不起作用。

有什么想法或其他解决方案吗?

【问题讨论】:

    标签: java spring unit-testing dependency-injection spring-test


    【解决方案1】:

    我最好将这个通用对象配置为某个上下文配置类中的 bean,然后使用 @ContextConfiguration(classes = TestConfig.class) 使其可用于测试类

    否则,如果您确实需要在您的 TestExecutionListener 中配置此对象,您可以在您的上下文配置中的任何位置注册此 bean,然后在您的 TestExecutionListener 中自动装配它并在此处更改其状态。但这似乎更像是一种 hack,而不是一种解决方案。

    【讨论】:

    • 看来我在你的回答中遗漏了一些东西。让我澄清一下,我最终在从测试类导入的单独配置类中添加了一个 bean。这很好用。我现在遇到的问题是我无法在 TestExecutionListener 中自动装配,所以我使用测试上下文来查找 bean。它可以工作,但我更喜欢基于注释的注入。
    • 看看我对以下问题的回答:stackoverflow.com/questions/42204840/… 您可以使用 testContext.getApplicationContext() .getAutowireCapableBeanFactory().autowireBean(this); 为 TestExecutionListener 自动装配 bean;在 beforeTestClass 方法中。它将自动装配您在 TestExecutionListener 中声明的所有 @Autowired bean。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多