【问题标题】:Is it possible to get @Autowired to happen before @Factory method in TestNG?是否有可能在 TestNG 中的 @Factory 方法之前发生 @Autowired?
【发布时间】:2015-05-08 05:04:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: java webdriver testng


    【解决方案1】:

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

    由于@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 以使该“额外”实例不执行任何操作。有点笨重,但工作。

    根据它给我的肮脏感觉,我会否决这个答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多