繁体   English   中英

TestNG和Spring集成

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM