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

Spring Boot联调-数据库没有自动安装@WebMvcTest

谢洛城
2023-03-14

我有一个sprig引导(版本1.5.6)应用程序,它使用以下内容:

  • spring boot starter数据jpa(jpa存储库和实体)

现在,我正在为这个应用程序创建单元测试。在一个测试用例中,我有以下注释:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, properties = { "spring.cloud.enabled=false" })

测试正确初始化了jpa存储库,我能够测试相同的。

然后我有另一个带有以下注释的测试:

@RunWith(SpringRunner.class)
@WebMvcTest(MyRestController.class)

此测试设置Mockmvc,但不会初始化JPA存储库。它只初始化配置的MVC部分。但我也需要初始化JPA存储库。我用数据设置了测试数据。作为内存H2数据库加载的sql文件。我遇到的错误是:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available

我尝试了许多没有成功的事情:

  • 使用两个注释不起作用,因为类只能有一个“BootstrapBy”注释。
  • @EnableJpaRepositories不工作
  • @自动配置测试数据库不工作

我确实在上下文初始化时看到了以下内容:

.s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!

现在由于Spring能够在第一次测试中自动装配jpa存储库并且它在应用程序中运行良好,我认为它应该也能够在webMvc测试用例中自动装配存储库。

我可以创建一个配置文件,并在测试包中初始化实体管理器、数据源等,但如果有一种方法可以自动连接spring,那么我不想管理该配置。

请提出建议。

共有1个答案

羊舌子瑜
2023-03-14

我看到您有WebMvcTest注释。这个特定的测试只测试web层,它不加载整个应用程序上下文,只加载web上下文。您可能需要切换到SpringBootTest和AutoConfigureMockMvc来测试整个堆栈。

使用Spring Boot进行JPA测试的方法是使用DataJpaTest注释。它会自动配置所有内容,前提是类路径中有内存中的DB(如果使用maven,请确保它在“测试”范围内)。它还提供了TestEntityManager,它是JPA的EntityManager接口的实现,具有一些有用的测试功能。

示例:

@RunWith(SpringRunner.class)
@DataJpaTest
pubic class EntityTest {
    @Autowired TestEntityManager entityManager;

    @Test
    public void saveShouldPersistData() throws Exception {
        User saved = entityManager.persistFlushFind(new User("username", "password"));
        assertNonNull(saved);
    }
}

在您的pom.xml中,您可以添加H2数据库(Spring Boot也可以自动配置Derby和HSQLDB)

<dependency>
  <groupId>com.h2database</groupId>
  <artifactId>h2</artifactId>
  <scope>test</scope>
</dependency>
 类似资料:
  • 当应用程序启动时,我正在尝试创建mysql数据库。我尝试了波纹管配置,但无法实现,如果有人对此有想法,请告诉我,

  • 本文向大家介绍centOS7安装MySQL数据库,包括了centOS7安装MySQL数据库的使用技巧和注意事项,需要的朋友参考一下 1、先检测系统是否自带原有版本mysql安装包,如果有要先卸载删除,不然不能成功安装和启动; # rpm -qa|grep mysql      查看有哪些安装包,如果直接跳过,说明没有安装包,记忆可以直接进入第2、3 # yum remove mysql mysql

  • 这节课我们将来配置MySQL数据库,启动运行在另外一个容器中,然后把它link到users-service容器中...... 增加Flask-SQLAlchemy和PyMySQL到requirementx.txt文件中: Flask-SQLAlchemy==2.3.2 PyMySQL==0.8.0 当然要记得安装这些依赖包: (tdd3)$ pip install -r requirements

  • MySQL是最著名的开源数据库,现在正在开发的5.0版将具有大量的新特性,如存储过程和事务处理等。MySQL的性能正一步步地迫近Oracle、DB2等商业大型数据库,给这些产品造成了很大的压力。 在Debian中安装MySQL服务器是很方便的,使用apt-get命令即可完成。 debian:~# apt-get install mysql-server mysql-client mysql-s

  • 安装Mysql服务器 官方文档:安装和升级MySQL 这里给出在windows和linux中安装mysql服务器的方法,同时补充一种在docker中安装mysql容器的方法。 TIPS: 因为mysql在centos7中已经开始收费,因此本文在linux中实际安装的是mariadb。 windows 在windows下使用mysql服务器有两种方式,一种是使用mysql提供的MSI Install

  • 主要内容:1.分析,2.样例讲解1,3.样例讲解2,4.总结1.分析 先看@SpringBootApplication @SpringBootConfiguration:标记当前类为配置类 @EnableAutoConfiguration:开启自动配置 @ComponentScan:扫描主类所在的同级包以及下级包里的Bean @EnableAutoConfiguration: @Import(AutoConfigurationImportSelector.