在 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 JDBC

spring-boot实战12:Spring Boot中使用JavaMailSender发送邮件

Spring Boot:在Spring Boot中使用Mysql和JPA

在 spring-boot 项目中使用 spring mvc xml 项目

Spring boot在Spring boot中Redis的使用

如何在 spring-boot 中禁用 spring-data-mongodb 自动配置