java - 在 Spring Boot 中使用 Hibernate 配置 DAO 层的单元测试

标签 java hibernate spring-boot junit

我已经使用 Springboot 和 Hibernate 创建了一个应用程序,我想为其配置单元测试。

首先这是 DAO 接口(interface)。

public interface OrderDetailsDao {
    void createOrder(OrderDetails orderDetails);
    void updateOrder(OrderDetails orderDetails);
    void deleteOrder(OrderDetails orderDetails);
}

这是DAO接口(interface)实现

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 层配置单元测试的最佳方法吗?

最佳答案

您应该使用@SpringBootTest注释您的测试类,以告诉Spring Boot使Spring应用程序上下文(以及所有Spring bean)可用于测试。此外,您应该在 Spring Boot 中使用 SpringRunner 而不是 SpringJunit4ClassRunner。即:

@RunWith(SpringRunner.class)
@SpringBootTest
public class OrderDetailsDaoTest {

如果这仍然不起作用,您可能需要使用 @ContextConfiguration 注释直接指定包含扫描 DAO 类的组件扫描的配置类。然而,使用 Spring Boot 时通常不需要这样做。

关于java - 在 Spring Boot 中使用 Hibernate 配置 DAO 层的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46015115/

相关文章:

java - hibernate 标准 : creating alias with entity through another entity with embeddedId

java - hibernate + Spring 应用程序。在使用数据库之前添加逻辑

spring-boot - Spring Boot 2.2.0.RELEASE 不映射 thymeleaf 放置和删除请求

java - 实现 Google Pub Sub 的方法

java - 如何指定输入

java - 是否有任何预定义的方法来交换两个元素?

java - GWT + Spring + Hibernate 中的示例应用程序

spring - Spring Boot ResponseEntity不操纵HTTP响应

java - 如何判断泛型是否是 Java 中类的实例?

java - 类型安全、Java 泛型和查询