TestExecutionListeners中的Spring Boot autowire依赖项

时间:2017-02-22 23:27:23

标签: spring-boot

情况:有一台服务器会接受我交给它的测试结果,但只给出了适当的授权和客户端配置。所以我编写了一个客户端类作为bean,从application.properties加载正确的凭据(在同一个庄园中,你将连接到具有凭证和spring属性的数据库)。我现在想编写一个使用此客户端执行此操作的testng侦听器。做我的研究,我发现要做的Spring应该是扩展AbstractTestExecutionListener

因此,如果我将我的客户端作为类成员自动装配,就像这样@Autowired private MyClient client;我可以看到正确创建了bean,但是如果我尝试在我的监听器中使用它:

@TestExecutionListeners(mergeMode = MergeMode.MERGE_WITH_DEFAULTS, listeners = {MyListener.class})
public abstract class MyTestParent extends AbstractTestNGSpringContextTests { //...

我可以看到bean没有自动装配,这让我相信这些监听器在spring上下文之外被实例化为bean本身。

如何编写一个可以从Spring上下文连接到它的依赖项的侦听器(特定于spring或testng)?如果我想将结果推送到其他任意测试结果存储库(如数据库),该怎么办?

1 个答案:

答案 0 :(得分:1)

Spring不会在TestListeners中自动连接依赖项。 但是您可以访问beanfactory并使用它来自动跟踪侦听器本身:

public class CustomTestExecutionListener extends AbstractTestExecutionListener {

    @Autowired
    TestSupport support;

@Override
public void beforeTestClass(TestContext testContext) throws Exception {
    //get the beanfactory and use it to inject into this
    testContext.getApplicationContext()
            .getAutowireCapableBeanFactory()
            .autowireBean(this);

    //now use the autowired field 
    support.beforeClass();
}

... }