如何用SpringBoot 进行测试

yizhihongxing

如何用SpringBoot进行测试?

一、引入依赖

我们在pom.xml文件中引入以下依赖:

<!-- spring-boot-starter-test -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>

此外,如果你想使用Mockito和MockMvc进行测试,可以再引入以下依赖:

<!-- mockito-core -->
<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-core</artifactId>
  <version>3.0.0</version>
  <scope>test</scope>
</dependency>

<!-- spring-boot-starter-web -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <scope>test</scope>
</dependency>

<!-- spring-boot-starter-test -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>

这是因为MockMvc需要使用Web环境进行测试,因此需要引入spring-boot-starter-web依赖。

二、编写测试类

下面我们来编写一个测试类来测试一个Controller是否正常工作。

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

    private MockMvc mockMvc;

    @Autowired
    private HelloController helloController;

    @Before
    public void setUp() throws Exception {
        mockMvc = MockMvcBuilders.standaloneSetup(helloController).build();
    }

    @Test
    public void test() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/hello"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().string("Hello World"));
    }

}

我们使用了JUnit和SpringRunner来编写测试类。使用@SpringBootTest注解来创建Spring上下文环境,使得我们可以直接使用自动注入的Bean。在类中注入了一个HelloController实例,并使用MockMvc进行测试。

使用@Before注解的setUp()方法来初始化MockMvc实例,参数为一个Controller实例。这样我们就可以使用MockMvc来模拟请求了。

使用@Test注解的test()方法来编写测试代码。在该方法内,我们使用get方法模拟了一个"/hello"的请求。然后使用andExpect()方法来验证请求的返回值是否符合我们的预期。在本示例中,我们预期返回的内容为"Hello World",并且状态码为200。

三、使用Mockito进行测试

接下来,我们使用Mockito对一个Service进行测试。仍然以HelloController为例,编写如下测试代码:

@RunWith(MockitoJUnitRunner.class)
public class HelloServiceTest {

    @Mock
    private HelloService helloService;

    @InjectMocks
    private HelloController helloController;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void test() {
        when(helloService.sayHello()).thenReturn("Mock Hello");
        String result = helloController.sayHello();
        assertEquals("Mock Hello", result);
    }

}

我们使用了JUnit和MockitoJUnitRunner来编写测试类。使用@Mock注解来创建Mock对象。在本示例中,我们创建了一个HelloService的Mock对象。使用@InjectMocks注解来创建一个HelloController的实例并注入Mock对象。在@Before注解的setUp()方法中,我们使用MockitoAnnotations.initMocks(this)来初始化Mockito。这个方法的作用就是遍历HelloController类,将其中所有以@Mock注解的属性替换为Mock对象。

在@Test注解的test()方法中,我们模拟了HelloService中的sayHello()方法,并将它的返回值设为"Mock Hello"。然后通过HelloController调用sayHello()方法,并将返回值与我们期望的结果进行比较,以验证测试是否通过。

这就是使用SpringBoot进行测试的完整攻略。通过这个攻略,我们已经了解了如何使用MockMvc和Mockito进行测试。可以通过这种方式来进行单元测试和集成测试,帮助我们更好地保障应用程序的正常运行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何用SpringBoot 进行测试 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 使用 Binlog 和 Canal 从 MySQL 抽取数据

    转载自: https://blog.csdn.net/zjerryj/article/details/77152226   技术点: Apache Sqoop Ali Canal https://github.com/alibaba/canal Hive 0.14 支持 insert update delete , 2.0 后支持 Streaming Mut…

    MySQL 2023年4月16日
    00
  • SpringBoot项目如何连接MySQL8.0数据库

    下面是连接MySQL8.0数据库的完整攻略,步骤如下: 步骤一:准备工作 在开始连接MySQL8.0数据库之前,需要先准备好以下工作: 确保你已经安装了Java开发环境和SpringBoot框架; 确保你已经安装了MySQL8.0数据库; 确保你已经在MySQL中创建了需要的数据库和数据表。 步骤二:配置pom.xml文件 在SpringBoot项目中使用M…

    database 2023年5月18日
    00
  • Oracle怎么删除数据,Oracle数据删除的三种方式

    Oracle怎么删除数据 在Oracle中,数据删除有三种方式:DELETE、TRUNCATE和DROP。这三种方式功能不同,使用时需谨慎。 DELETE语句删除数据 DELETE语句是用来删除表中的数据的,其中可以带WHERE子句。如果不带WHERE子句,则删除整个表中的所有行。 DELETE语句的语法如下所示: DELETE FROM table_nam…

    database 2023年5月21日
    00
  • Oracle 创建主键自增表示例代码

    下面是详细的Oracle 创建主键自增的示例代码攻略: 1. 创建表并定义主键自增 首先,我们需要在Oracle中创建一张表,并定义其中的某一列为主键,并设置其自增。以下是示例代码: CREATE TABLE students ( id NUMBER(10) PRIMARY KEY, name VARCHAR2(50), age NUMBER(3) ); C…

    database 2023年5月21日
    00
  • MySQL之数据表的插入内容 空与非空(六)

    NULL与NOT NULL mysql> CREATE TABLE tb2( -> usename VARCHAR(20) NOT NULL, -> age TINYINT UNSIGNED NULL(可以为空) -> );Query OK, 0 rows affected (0.06 sec) mysql> SHOW COLU…

    MySQL 2023年4月16日
    00
  • Centos7备份文件时备份文件加入备件日期

    下面是“Centos7备份文件时备份文件加入备件日期”的完整攻略: 步骤一:创建备份脚本 在Centos7系统上,使用vim或nano等编辑器创建一个新脚本文件,例如命名为backup.sh。 在脚本的开头添加以下代码,用于获取当前日期并存储为变量: #!/bin/bash now=$(date +"%Y-%m-%d") 在脚本中添加其他…

    database 2023年5月22日
    00
  • Linux自动备份MySQL数据库脚本代码

    下面就是关于“Linux自动备份MySQL数据库脚本代码”的完整攻略: 环境准备 在开始编写脚本之前,需要确保以下环境已经安装: MySQL客户端:用于备份指定的MySQL数据库。 Shell脚本编写工具:例如vim或nano等。 编写Shell脚本 下面是一个简单的Shell脚本示例,用于备份MySQL数据库: #!/bin/bash # 定义备份路径和文…

    database 2023年5月22日
    00
  • sql server学习基础之内存初探

    SQL Server学习基础之内存初探 简介 SQL Server 作为一款重量级的数据库,内存使用是它的一个重要特性。本文将介绍 SQL Server 内存管理的基础知识,以及如何通过监控内存来了解数据库运行状况。 SQL Server内存管理 SQL Server 中,缓存和内存是两个不同的概念。缓存包括了计划缓存、存储缓存和缓存池等内容,而内存则是指 …

    database 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部