【问题标题】:Configure Unit testing for DAO Layer with Hibernate in SpringBoot在 Spring Boot 中使用 Hibernate 为 DAO 层配置单元测试
【发布时间】: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 会让你的问题更清楚。

标签: java hibernate spring-boot junit


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2019-01-20
    • 1970-01-01
    相关资源
    最近更新 更多