我将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中。
要调用任何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;
}
}
确保您具有与基础对象工厂相关的其他配置。