最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot使用MockMvc進行單元測試的實例代碼

 更新時間:2024年01月19日 11:29:02   作者:冷風扇666  
在Spring Boot應用程序中,使用MockMvc進行單元測試是一種有效的方式,可以驗證控制器的行為和API的正確性,在這篇博客中,我們將介紹如何使用MockMvc對用戶控制器進行測試,感興趣的朋友可以參考下

引言

在Spring Boot應用程序中,使用MockMvc進行單元測試是一種有效的方式,可以驗證控制器的行為和API的正確性。在這篇博客中,我們將介紹如何使用MockMvc對用戶控制器(UserController)進行測試,該控制器涉及用戶信息的增刪改查操作。

UserController測試類

package com.lfsun.mockmvc;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.lfsun.mockmvc.entity.User;
import com.lfsun.mockmvc.service.UserService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;

import java.util.Arrays;
import java.util.List;

import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private UserService userService;

    @Autowired
    private ObjectMapper objectMapper;

    @Before
    public void setUp() {
        // 在測試前初始化一些數據,或者使用Mockito進行一些mock設置
    }

    @Test
    public void getAllUsersTest() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/user/getAllUsers"))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$").isArray())
                .andExpect(jsonPath("$.length()").value(userService.getAllUsers().size()))
                .andDo(print());
    }

    @Test
    public void getUserByIdTest() throws Exception {
        Long userId = 1L;
        mockMvc.perform(MockMvcRequestBuilders.get("/user/getUserById/{userId}", userId))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.userId").value(userId))
                .andDo(print());
    }

    @Test
    public void addUserTest() throws Exception {
        User user = new User();
        user.setUsername("testUser");
        user.setEmail("test@lfsun.com");

        mockMvc.perform(MockMvcRequestBuilders.post("/user/addUser")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(user)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.username").value("testUser"))
                .andExpect(jsonPath("$.email").value("test@lfsun.com"))
                .andDo(print());
    }

    @Test
    public void updateUserTest() throws Exception {
        Long userId = 1L;
        User updatedUser = new User();
        updatedUser.setUserId(userId);
        updatedUser.setUsername("updatedUser");
        updatedUser.setEmail("updated@lfsun.com");

        mockMvc.perform(MockMvcRequestBuilders.put("/user/updateUser")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(updatedUser)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.userId").value(userId))
                .andExpect(jsonPath("$.username").value("updatedUser"))
                .andExpect(jsonPath("$.email").value("updated@lfsun.com"))
                .andDo(print());
    }

    @Test
    public void deleteUserTest() throws Exception {
        Long userId = 1L;
        mockMvc.perform(MockMvcRequestBuilders.delete("/user/deleteUser/{userId}", userId))
                .andExpect(status().isOk())
                .andDo(print());
    }
}

解釋和注意事項

  1. MockMvc的注入: @Autowired 注解用于將MockMvc實例注入測試類中。
  2. 數據初始化: 使用 @Before 注解的 setUp 方法,可以在測試前進行一些數據初始化或使用Mockito進行一些mock設置。
  3. 測試方法: 每個測試方法使用MockMvc執(zhí)行相應的HTTP請求,并使用斷言驗證控制器的響應是否符合預期。
  4. 數據序列化: ObjectMapper 負責將對象序列化為JSON,以便在POST和PUT請求中傳遞。

以下附上完整代碼

controller:

package com.lfsun.mockmvc.controller;


import com.lfsun.mockmvc.entity.User;
import com.lfsun.mockmvc.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用戶 Controller
 *
 * @author CL
 */
@RestController
@RequestMapping(value = "/user")
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;

    // 查詢所有用戶
    @GetMapping("/getAllUsers")
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    // 根據用戶ID查詢用戶
    @GetMapping("/getUserById/{userId}")
    public User getUserById(@PathVariable Long userId) {
        return userService.getUserById(userId);
    }

    // 添加用戶
    @PostMapping("/addUser")
    public User addUser(@RequestBody User user) {
        return userService.addUser(user);
    }

    // 更新用戶信息
    @PutMapping("/updateUser")
    public User updateUser(@RequestBody User user) {
        return userService.updateUser(user);
    }

    // 根據用戶ID刪除用戶
    @DeleteMapping("/deleteUser/{userId}")
    public void deleteUser(@PathVariable Long userId) {
        userService.deleteUser(userId);
    }
}

service、serviceimpl

package com.lfsun.mockmvc.service;


import com.lfsun.mockmvc.entity.User;

import java.util.List;

/**
 * 用戶 Service 接口
 */
public interface UserService {

    // 查詢所有用戶
    List<User> getAllUsers();

    // 根據用戶ID查詢用戶
    User getUserById(Long userId);

    // 添加用戶
    User addUser(User user);

    // 更新用戶信息
    User updateUser(User user);

    // 根據用戶ID刪除用戶
    void deleteUser(Long userId);
}
package com.lfsun.mockmvc.service.impl;

import com.lfsun.mockmvc.entity.User;
import com.lfsun.mockmvc.mapper.UserMapper;
import com.lfsun.mockmvc.service.UserService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 用戶 Service 實現(xiàn)類
 */
@Service
@AllArgsConstructor  // Lombok 自動生成構造函數
public class UserServiceImpl implements UserService {

    private final UserMapper userMapper;

    @Override
    public List<User> getAllUsers() {
        return userMapper.getAllUsers();
    }

    @Override
    public User getUserById(Long userId) {
        return userMapper.getUserById(userId);
    }

    @Override
    public User addUser(User user) {
        userMapper.addUser(user);
        return user;
    }

    @Override
    public User updateUser(User user) {
        userMapper.updateUser(user);
        return user;
    }

    @Override
    public void deleteUser(Long userId) {
        userMapper.deleteUser(userId);
    }
}

mapper

package com.lfsun.mockmvc.mapper;

import com.lfsun.mockmvc.entity.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 用戶 Mapper 接口
 */
@Mapper
public interface UserMapper {

    List<User> getAllUsers();

    User getUserById(Long userId);

    void addUser(User user);

    void updateUser(User user);

    void deleteUser(Long userId);
}

實體類:

package com.lfsun.mockmvc.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Long userId;
    private String username;
    private String email;

}

xml

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.lfsun.mockmvc.mapper.UserMapper">

    <resultMap id="BaseResultMap" type="com.lfsun.mockmvc.entity.User">
        <id column="user_id" property="userId" jdbcType="BIGINT"/>
        <result column="username" property="username" jdbcType="VARCHAR"/>
        <result column="email" property="email" jdbcType="VARCHAR"/>
    </resultMap>

    <!-- 查詢所有用戶 -->
    <select id="getAllUsers" resultMap="BaseResultMap">
        SELECT *
        FROM user;
    </select>

    <!-- 根據用戶ID查詢用戶 -->
    <select id="getUserById" resultMap="BaseResultMap" parameterType="java.lang.Long">
        SELECT *
        FROM user
        WHERE user_id = #{userId};
    </select>

    <!-- 添加用戶 -->
    <insert id="addUser" parameterType="com.lfsun.mockmvc.entity.User">
        INSERT INTO user (username, email)
        VALUES (#{username}, #{email});
    </insert>

    <!-- 更新用戶信息 -->
    <update id="updateUser" parameterType="com.lfsun.mockmvc.entity.User">
        UPDATE user
        SET username = #{username},
            email    = #{email}
        WHERE user_id = #{userId};
    </update>

    <!-- 根據用戶ID刪除用戶 -->
    <delete id="deleteUser" parameterType="java.lang.Long">
        DELETE
        FROM user
        WHERE user_id = #{userId};
    </delete>

</mapper>

配置

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/mockmvc?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
    username: root
    password: 123321

mybatis:
  mapper-locations: classpath:/mapper/*.xml  # 指定 MyBatis mapper 文件的位置
  configuration:
    map-underscore-to-camel-case: true  # 配置駝峰命名規(guī)則

maven

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.14</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.lfsun</groupId>
    <artifactId>lfsun-study-mockmvc</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>lfsun-study-mockmvc</name>
    <description>lfsun-study-mockmvc</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

最后

以上就是SpringBoot使用MockMvc進行單元測試的實例代碼的詳細內容,更多關于SpringBoot MockMvc單元測試的資料請關注腳本之家其它相關文章!

相關文章

  • Java創(chuàng)建數組的3種方式代碼舉例

    Java創(chuàng)建數組的3種方式代碼舉例

    數組是相同類型數據的有序集合,數組描述的是若干個相同類型的數據按照一定的先后次序排列組合而成,其中每一個數據稱為數組的元素,可以通過下標進行訪問,這篇文章主要給大家介紹了關于Java創(chuàng)建數組的3種方式,需要的朋友可以參考下
    2024-01-01
  • Springboot如何優(yōu)雅高效的清除Redis中的業(yè)務key

    Springboot如何優(yōu)雅高效的清除Redis中的業(yè)務key

    這篇文章主要為大家詳細介紹了Springboot如何優(yōu)雅高效的清除Redis中的業(yè)務key,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-05-05
  • redisson特性及優(yōu)雅實現(xiàn)示例

    redisson特性及優(yōu)雅實現(xiàn)示例

    這篇文章主要為大家介紹了redisson特性及優(yōu)雅實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Swagger中@API?tags中含有中文異常問題的解決

    Swagger中@API?tags中含有中文異常問題的解決

    這篇文章主要介紹了Swagger中@API?tags中含有中文異常問題的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • 淺談servlet3異步原理與實踐

    淺談servlet3異步原理與實踐

    本篇文章主要介紹了servlet3異步原理與實踐,詳細的介紹了servlet和異步的流程使用,具有一定的參考價值,有興趣的可以了解一下
    2017-10-10
  • 基于Java回顧之I/O的使用詳解

    基于Java回顧之I/O的使用詳解

    我計劃在接下來的幾篇文章中快速回顧一下Java,主要是一些基礎的JDK相關的內容
    2013-05-05
  • Java中Stream流的使用示例詳解

    Java中Stream流的使用示例詳解

    Stream流提供了一種高效且易于使用的方式來對數據進行過濾、映射、排序、聚合等操作,使代碼更加簡潔和可讀,接下來通過本文給大家介紹Java中Stream流的使用,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • mybatis 返回Map類型key改為小寫的操作

    mybatis 返回Map類型key改為小寫的操作

    這篇文章主要介紹了mybatis 返回Map類型key改為小寫的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java基于NIO實現(xiàn)群聊功能

    Java基于NIO實現(xiàn)群聊功能

    這篇文章主要為大家詳細介紹了Java基于NIO實現(xiàn)群聊功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 解析idea內嵌瀏覽器翻譯

    解析idea內嵌瀏覽器翻譯

    這篇文章主要介紹了解析idea內嵌瀏覽器翻譯的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10

最新評論

靖州| 右玉县| 高碑店市| 鹿泉市| 福清市| 巴马| 安陆市| 深水埗区| 山阳县| 扎囊县| 邳州市| 天长市| 大渡口区| 荃湾区| 库伦旗| 韩城市| 尉氏县| 桦甸市| 白河县| 民县| 甘孜| 开化县| 绍兴县| 长海县| 兴仁县| 车致| 东丽区| 南昌市| 南华县| 六盘水市| 房产| 永济市| 新沂市| 游戏| 武安市| 濉溪县| 蕉岭县| 临颍县| 塔河县| 启东市| 哈尔滨市|