情况:有一台服务器会接受我交给它的测试结果,但只给出了适当的授权和客户端配置。所以我编写了一个客户端类作为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)?如果我想将结果推送到其他任意测试结果存储库(如数据库),该怎么办?
答案 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();
}
... }