gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:31:27 25 4
gpt4 key购买 nike

我已经使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com