在SpringBoot中使用Hibernate为DAO层配置单元测试

时间:2017-09-02 15:03:57

标签: java hibernate spring-boot junit

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

1 个答案:

答案 0 :(得分:1)

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

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

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