[[qaf]当我使用testng xml运行黄瓜测试用例时,如何使用qaf进行自动关联上下文

问题描述 投票:0回答:1

我将qaf与testng一起使用来运行黄瓜测试用例。现在,我想在测试步骤中使用spring自动连接内容。

@ContextConfiguration(classes = H2DBConfig.class)
public class TestByTestNg extends AbstractTestNGSpringContextTests {

    private UserRepository userRepository;

    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Test
    public void test() {
        List<User> users = userRepository.findAll();
        for (User user : users) {
            System.out.println(user.toString());
        }
    }
}

[使用上述@Test注释时效果很好。

@QAFTestStepProvider
@ContextConfiguration(classes = H2DBConfig.class)
public class WebTestSteps extends AbstractTestNGSpringContextTests {

    private UserRepository userRepository;

    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @When("^I open browser to web page$")
    public void iOpenBrowserToWebPage() {

        User user = userRepository.getOne(1);
        System.out.println(user.toString());
    }

}

如果我使用testng这样运行黄瓜测试用例,则UserRepository无法成功@Autowired。

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
}

如何解决它,以便可以将UserRepository设置为@Autowired?我想将spring-data-jpa集成到qaf中。

spring cucumber testng qaf
1个回答
0
投票

要调用任何TestStep QAF,要求该类的对象或方法必须是静态的。默认情况下,QAF使用非args构造函数创建一个新对象。

但是在QAF中,您可以使用以下方法设置CustomObjectFactory。您可以在TestNG侦听器中设置对象工厂。

ObjectFactory.INSTANCE.setFactory(new CustomObjectFactory());
import com.qmetry.qaf.automation.step.ObjectFactory;

public class CustomObjectFactory implements ObjectFactory {

    @Override
    public <T> T getObject(Class<T> cls) throws Exception {
        // your implementation
        return object;
    }

}

在这里,您可以通过实现来创建该类的对象。希望这可以帮助。

EDIT:如果要使用任何第三方对象工厂,则可以使用它。敌人的例子,下面是使用基本的Guice实现。

/**
 * @author chirag.jayswal
 *
 */
public class GuiceObjectFactory extends DefaultObjectFactory {//implements ObjectFactory {
    private static final Injector injector = Guice.createInjector(new GuiceModule());
    public <T> T getObject(Class<T> cls) throws Exception {
        T obj = injector.getInstance(cls);
        return obj;
    }
}

确保您具有与基础对象工厂相关的其他配置。

© www.soinside.com 2019 - 2024. All rights reserved.