gpt4 book ai didi

java - 使用 Spring MVC 进行 Hibernate 配置以进行测试

转载 作者:行者123 更新时间:2023-11-30 23:08:04 25 4
gpt4 key购买 nike

我正在尝试使用 H2 内存数据库为我的 Spring MVC 应用程序设置测试。

现在,我所有的 Hibernate 配置都在一个 Java 文件 PersistenceConfig.java 中,它包含包含所有 Hibernate 配置的 SessionFactory

但是,我的测试上下文是在 XML 中,因为那样更容易 - 有什么方法可以让它工作吗?现在,当我运行我的测试时,我得到的只是错误,因为它无法连接到 MySQL,它甚至不应该尝试这样做。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd">

<!-- annotation support -->
<context:annotation-config/>

<!-- support for transaction -->
<tx:annotation-driven transaction-manager="transactionManager"/>

<context:component-scan base-package="com.package.configuration" />
<context:component-scan base-package="com.package.models" />

<!-- H2 datasource -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem:test;MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=TRUE"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>

<jdbc:initialize-database data-source="dataSource" ignore-failures="DROPS">
<jdbc:script location="classpath:reset_database.sql"/>
<jdbc:script location="classpath:create_testdata.sql"/>
</jdbc:initialize-database>

<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>

<bean id="persistenceConfig" class="com.package.configuration.PersistenceConfig"/>
<bean id="userDao" class="com.package.models.user.UserDao"/>
</beans>

我的测试类看起来像

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/test-context.xml",
"classpath:/spring/spring-security.xml"})
@Transactional
public class UserTest {
private UserDao userDao = new UserDao();

private static User user;

@Autowired
@Qualifier("sessionFactory")
private static SessionFactory sessionFactory;

@BeforeClass
public static void initUser() {
user = new User(...);
}

@Test
public void testSave() throws Exception {
userDao.save(user);
User foundUser = userDao.findByUuid(user.getUuid());
assertEquals(foundUser.getUuid(), user.getUuid());
}
}

sessionFactory 没有被 Autowiring ,userDao 永远不会得到它。

我的 UserDao 在其构造函数中调用了 PersistenceConfig.sessionFactory(),并且 PersistenceConfig 为其提供了一个 sessionFactory对应于MySQL。我需要以某种方式将其切换为 H2 sessionFactory

我是不是完全错了?

最佳答案

看起来,当您注入(inject) sessionFactory 时,它正在加载 PersistenceConfig.java,通常当您注入(inject)一个对象时,其他依赖项也会被注入(inject)。如果我是你,我会使用 hibertane.hbm.xml 来配置你测试连接,它会覆盖所有其他配置...

关于java - 使用 Spring MVC 进行 Hibernate 配置以进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20984081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com