2017-02-22 64 views
0

情况:有一台服务器可以接受我交给它的测试结果,但只能给予适当的授权和客户端配置。所以我编写了一个客户端类作为一个bean,它从application.properties中加载了正确的凭据(在您使用凭证和spring的属性连接到数据库的同一庄园中)。我现在想编写一个使用此客户端的testng侦听器来执行此操作。做我的研究,我发现春天要做的事情应该是延长AbstractTestExecutionListenerTestExecutionListeners中的Spring Boot autowire依赖关系

所以,如果我自动装配我的客户作为一个类的成员,这样@Autowired private MyClient client;我可以看到豆被正确创建,但是如果我尝试使用它在我的听众是这样的:

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

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

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

回答

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(); 
} 

... }

+0

这是不是我最后做,但它直接回答我的问题。谢谢 –