当前位置: 首页 > 知识库问答 >
问题:

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

斜单鹗
2023-03-14

我已经创建了一个应用程序使用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个答案

隗俊誉
2023-03-14

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

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

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

 类似资料:
  • 环境类 SpringBoot 2,H2作为测试依赖项。 生产厂 Jar被部署到云上。DB2服务配置了驱动程序和连接细节,并自动绑定到java应用程序。jar本身没有配置。这就是应用程序。属性文件,但它是空的。这部分工作正常,我希望有一个解决方案存在,它将不需要我创建属性文件和配置文件。 “未找到架构xxx”上的本地单元测试崩溃 不存在数据源配置。 SpringBoot看到H2依赖,并默认选择Hib

  • 我在java中开发了一个工作正常的配置单元udf,我的函数返回输入与配置单元表中列之间的最佳匹配,因此它有以下简化的伪代码: 我的问题是,如果这个函数是由Hive调用的,为什么我需要在代码中连接到Hive?我可以使用使用我的功能的用户所连接的当前连接吗?

  • 在Spring Boot应用程序中,我访问Hibernate会话,如下所示:https://stackoverflow.com/a/33881946/272180 我的单元测试类类似于以下自动取款机: 引用具有用于运行Spring Boot应用程序的main方法的类。

  • 我想测试我的SpringBoot应用程序,它使用cassandra作为CrudRepository。我最终得到了 具有 和 这就导致了 如果我使用旧版本的cassandra-unit-Spring 它以NullPointerException结束,因为没有注入值repo。 来源https://github.com/StephanPraetsch/spring.boot.cassandra.unit

  • 我正在尝试测试我的PreUpdateEventListener流,但我似乎无法使其在JUnit测试中工作。我没有收到任何错误,但没有调用代码。 我的PreUpdateEventListener: 测试: 我曾尝试将SessionFactory注入测试并调用SessionFactory#flush方法,但这不会引发CurrentContextSession错误,我似乎无法修复。

  • 嗨,我想在SPRING mvc中创建DAO单元测试,例如这种类型的代码 ...做这件事最好的方法是什么