[英]JUnit returns error creating bean with name 'sessionFactory' defined in URL
我是JUnit的新手。 为了进行试验,我想测试Spring的存储库类。 它只有一种方法可用于根据提供的ID检索行,但我收到异常。 我发现解决该问题的一种方法是添加一个上下文类,但是我不确定这是否有帮助,如果有帮助,则不确定如何执行。 另一个问题是我想运行测试用例时需要运行项目吗?!
例外
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:94)
at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.java:72)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(
.........
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'Table1RepositoryImpl':
Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not
autowire field: private org.hibernate.SessionFactory com.myproject.repository.Table1RepositoryImpl.sessionFactory; nested
exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in URL
[file:WebContent/WEB-INF/my-servlet.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError:
javax.persistence.OneToMany.orphanRemoval()Z
at
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(
....
Caused by: org.springframework.beans.factory.BeanCreationException:
Could not autowire field: private org.hibernate.SessionFactory
com.myproject.repository.Table1RepositoryImpl.sessionFactory; nested
exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'sessionFactory' defined in URL [file:WebContent/WEB-INF/my-servlet.xml]: Invocation of init method
failed; nested exception is java.lang.NoSuchMethodError:
javax.persistence.OneToMany.orphanRemoval()Z
....
Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'sessionFactory' defined in URL
[file:WebContent/WEB-INF/my-servlet.xml]: Invocation of init method
failed; nested exception is java.lang.NoSuchMethodError:
javax.persistence.OneToMany.orphanRemoval()Z
......
Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:2021)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:895)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:728)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3625)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3579)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1381)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1786)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1870)
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562)
... 53 more
JUnit测试用例
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:WebContent/WEB-INF/my-servlet.xml"})
public class Table1RepositoryTests {
@Autowired
private Table1Repository table1Repository;
private Table1 table1;
@Before
public void setup(){
table1 = new Table1();
table1.setDescription("This is row 1 of table 1");
table1.setId(1);
}
@Test
public void shouldReturnFirstRowOfTable1(){
Table1 result = table1Repository.retrieveTableById(1);
assertEquals(result,table1);
}
}
更新
看来我应该注入SessionFactory对象。 由于我的存储库类中有以下行。
@Autowired
private SessionFactory sessionFactory;
我还发现以下链接显示“例如,不要编写发出HTTP请求,访问数据库或从文件系统读取的单元测试”。 那我应该如何测试我的存储库代码是否正常工作?
no such method orphanRemoval
。 谷歌它你可以在stackoverflow或博客中找到答案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.