在 Spring Boot 中使用 Hibernate 为 DAO 层配置单元测试
Posted
技术标签:
【中文标题】在 Spring Boot 中使用 Hibernate 为 DAO 层配置单元测试【英文标题】:Configure Unit testing for DAO Layer with Hibernate in SpringBoot 【发布时间】:2018-02-11 09:31:34 【问题描述】:我已经使用 Springboot 和 Hibernate 创建了一个应用程序,我想为其配置单元测试。
首先这是 DAO 接口。
public interface OrderDetailsDao
void createOrder(OrderDetails orderDetails);
void updateOrder(OrderDetails orderDetails);
void deleteOrder(OrderDetails orderDetails);
这是DAO接口实现
public class OrderDetailsDaoImpl extends HibernateDaoSupport implements OrderDetailsDao
public void createOrder(OrderDetails orderDetails)
getHibernateTemplate().save(orderDetails);
public void updateOrder(OrderDetails orderDetails)
getHibernateTemplate().save(orderDetails);
public void deleteOrder(OrderDetails orderDetails)
getHibernateTemplate().delete(orderDetails);
然后我创建了一个如下的测试类
@RunWith(SpringJUnit4ClassRunner.class)
public class OrderDetailsDaoTest
OrderDetails orderDetails = new OrderDetails();
@Autowired
OrderDetailsDao orderDetailsDao;
@Test
public void testCreateOrder()
orderDetails.setValue(101.91);
orderDetailsDao.createOrder(orderDetails);
我已将 application.properties 文件放在 test 和 src 目录的资源中。
我尝试运行这个单元测试用例,但由于以下错误而失败:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.abdul.epl.repo.OrderDetailsDao' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: @org.springframework.beans.factory.annotation.Autowired(required=true)
那么我能知道为 DAO 层配置单元测试的最佳方法吗?
【问题讨论】:
您没有分享足够的关于您的应用程序的信息。OrderDetailsDaoImpl
在哪里配置为 Spring bean?您是否希望通过组件扫描或@Configuration
类上的@Bean
方法找到它? complete minimal example 会让你的问题更清楚。
【参考方案1】:
您应该使用 @SpringBootTest 注释您的测试类,以告诉 Spring Boot 使 Spring 应用程序上下文(以及所有 Spring bean)可用于测试。此外,您应该在 Spring Boot 中使用 SpringRunner 而不是 SpringJunit4ClassRunner。即:
@RunWith(SpringRunner.class)
@SpringBootTest
public class OrderDetailsDaoTest
如果这仍然不起作用,您可能需要使用 @ContextConfiguration 注解直接指定包含扫描您的 DAO 类的组件扫描的配置类的位置。但是,在使用 Spring Boot 时通常不需要这样做。
【讨论】:
以上是关于在 Spring Boot 中使用 Hibernate 为 DAO 层配置单元测试的主要内容,如果未能解决你的问题,请参考以下文章
spring-boot实战12:Spring Boot中使用JavaMailSender发送邮件
Spring Boot:在Spring Boot中使用Mysql和JPA
在 spring-boot 项目中使用 spring mvc xml 项目