是否有可能在 TestNG 中@Factory方法之前发生@Autowired?



我正在使用WebDriver和TestNG开发测试套件。 被测试的应用程序有一个"报告菜单",它是一组指向大量不同报告的链接。报告列表是基于一堆不同变量的动态的。我想创建一个@Factory,为每个链接创建一个不同的测试用例。目前为止,一切都好。

但是,要发现链接,我需要初始化 WebDriver(转到页面并找到所有链接),但这是通过 Spring IOC 的注入发生的,并且自动连线(使用 @Autowired)发生在测试运行程序生命周期的后期。用于构造驱动程序本身的所有参数也被注入(基 url、驱动程序类、下载目录等),因此在这种情况下"手动"创建 WebDriver 实例是不可行的 - 它必须通过 Spring 应用程序上下文完成,如使用@ContextConfiguration注释配置的那样。

那么,有没有一种手动方法可以让注射在跑步者的生命周期早期发生呢?

我对此的有点糟糕的解决方案是:

由于@Factory方法运行得非常早,因此只需让它返回一些"空"测试用例的预定义大小数组即可。 假设测试是MyTest,只需执行以下操作:

@Factory
public Object[] factoryMethod() {
Object[] tests = new MyTest[100];
for (int i = 0; i < 100; i++) {
tests[i] = new MyTest();
}
return tests;
}

让测试方法,比如test()里面MyTest以优先级=1运行。 在 priority=0 处有一个完全独立的测试方法,它使用现在实例化的WebDriver对象进入"菜单"页面,找到链接(希望少于 100 个),然后去"填写"预先创建的测试实例中缺少的参数。 最后,当调用MyTest实例的test()方法时,如果未填充参数,请抛出一个SkipException,以使该"额外"实例不执行任何操作。有点笨拙,但有效。

我会根据它给我的肮脏感觉对这个答案投反对票。

最新更新