![](/img/trans.png)
[英]TestNg + Spring Integration how to abstract beforeMethod
[英]TestNG and Spring integration
我正在尝试将Spring bean注入到testng @BeforeClass中,但是显示以下错误:
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.tais.automation.service.ExecutionDetailManager com.tais.automation.testing.Driver.executionDetailManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'executionDetailManager': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.tais.automation.service.impl.ExecutionDetailManagerImpl.setConvertUtils(com.tais.automation.util.ConvertUtils); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'convertutils': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.tais.automation.dao.ClientDao com.tais.automation.util.ConvertUtils.clientDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clientDao': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, mappedName=, description=, name=, type=class java.lang.Object, lookup=, authenticationType=CONTAINER)} at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) ... 125 more
@ContextConfiguration(locations="classpath*:/applicationContext.xml")
public class Driver extends AbstractTransactionalTestNGSpringContextTests {
@Autowired
ExecutionDetailManager executionDetailManager;
@Override
@BeforeSuite(alwaysRun=true)
protected void springTestContextPrepareTestInstance() throws Exception {
super.springTestContextBeforeTestClass();
super.springTestContextPrepareTestInstance();
}
@Parameters({ "Module"})
public void setUp(@Optional("") String varModule ) throws Exception {
//At this point my code breaks
String result=**executionDetailManager.getResult();**
}
}
public interface ExecutionDetailManager {
public String getResult();
}
@Service("executionDetailManager")
public class ExecutionDetailManagerImpl implements ExecutionDetailManager
{
public String getResult() {
return "testResult";
}
}
一旦我扩展AbstractTestNGSpringContextTests而不是AbstractTransactionalTestNGSpringContextTests,就可以解决以上sessionfactory问题。 但是现在我收到以下错误:
org.springframework.beans.factory.NoSuchBeanDefinitionException:在org.springframework.beans.factory.support的org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:638)上未定义名为“ executionDetailManager”的bean。 org.springframework.beans.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java: 195)at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973)at com.tais.automation.testing.Driver.setUp(Driver.java:119)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native方法)位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)位于java.lang.reflect处sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)的org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:564)的.Method.invoke(Method.java:606)。 org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)的org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:175)的internal.Invoker.invokeConfigurations(Invoker.java:213) org.testng.TestRunner.privateRun(TestRunner.java:767)处的org.testng.TestRunner.run(TestRunner.java:617)处的org.testng.TestRunner.privateRun(TestRunner.java:617)处的.internal.TestMethodWorker.run(TestMethodWorker.java:107) org.testng.SuiteRunner.access上的runTest(SuiteRunner.java:334).org.testng.SuiteRunner $ SuiteWorker.run(SuiteRunner.java:368)上的$ 000(SuiteRunner.java:37)org.testng.internal.thread上的(SuiteRunner.java:368)。 ThreadUtil $ 2.call(ThreadUtil.java:64)at java.util.concurrent.FutureTask.run(FutureTask.java:262)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)在java.lang.Thread.run(Thread.java:745)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.