1. 程式人生 > >Spring Boot:(十二)Spring Boot使用單元測試

Spring Boot:(十二)Spring Boot使用單元測試

前言

這次來介紹下Spring Boot中對單元測試的整合使用,本篇會通過以下4點來介紹,基本滿足日常需求

  • Service層單元測試
  • Controller層單元測試
  • 新斷言assertThat使用
  • 單元測試的回滾

    正文

    Spring Boot中引入單元測試很簡單,依賴如下:
    1
    2
    3
    4
    5
    
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-test</artifactId>
    	<scope>test</scope
    >
    </dependency>

本篇例項Spring Boot版本為1.5.9.RELEASE,引入spring-boot-starter-test後,有如下幾個庫:
• JUnit — The de-facto standard for unit testing Java applications.
• Spring Test & Spring Boot Test — Utilities and integration test support for Spring Boot applications.
• AssertJ — A fluent assertion library.
• Hamcrest — A library of matcher objects (also known as constraints or predicates).
• Mockito — A Java mocking framework.
• JSONassert — An assertion library for JSON.
• JsonPath — XPath for JSON.

image.png

Service單元測試

Spring Boot中單元測試類寫在在src/test/java目錄下,你可以手動建立具體測試類,如果是IDEA,則可以通過IDEA自動建立測試類,如下圖,也可以通過快捷鍵⇧⌘T(MAC)或者Ctrl+Shift+T(Window)來建立,如下:

image.png
image.png

自動生成測試類如下:

然後再編寫建立好的測試類,具體程式碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.dudu.service;
import com.dudu.domain.LearnResource;
import org.junit.Assert;
import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import static org.hamcrest.CoreMatchers.*; @RunWith(SpringRunner.class) @SpringBootTest public class LearnServiceTest { @Autowired private LearnService learnService; @Test public void getLearn(){ LearnResource learnResource=learnService.selectByKey(1001L); Assert.assertThat(learnResource.getAuthor(),is("嘟嘟MD獨立部落格")); } }

上面就是最簡單的單元測試寫法,頂部只要@RunWith(SpringRunner.class)SpringBootTest即可,想要執行的時候,滑鼠放在對應的方法,右鍵選擇run該方法即可。

測試用例中我使用了assertThat斷言,下文中會介紹,也推薦大家使用該斷言。

Controller單元測試

上面只是針對Service層做測試,但是有時候需要對Controller層(API)做測試,這時候就得用到MockMvc了,你可以不必啟動工程就能測試這些介面。

MockMvc實現了對Http請求的模擬,能夠直接使用網路的形式,轉換到Controller的呼叫,這樣可以使得測試速度快、不依賴網路環境,而且提供了一套驗證的工具,這樣可以使得請求的驗證統一而且很方便。

Controller類:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package com.dudu.controller;

/** 教程頁面
 * Created by tengj on 2017/3/13.
 */
@Controller
@RequestMapping("/learn")
public class LearnController  extends AbstractController{
    @Autowired
    private LearnService learnService;
    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @RequestMapping("")
    public String learn(Model model){
        model.addAttribute("ctx", getContextPath()+"/");
        return "learn-resource";
    }

    /**
     * 查詢教程列表
     * @param page
     * @return
     */
    @RequestMapping(value = "/queryLeanList",method = RequestMethod.POST)
    @ResponseBody
    public AjaxObject queryLearnList(Page<LeanQueryLeanListReq> page){
        List<LearnResource> learnList=learnService.queryLearnResouceList(page);
        PageInfo<LearnResource> pageInfo =new PageInfo<LearnResource>(learnList);
        return AjaxObject.ok().put("page", pageInfo);
    }

    /**
     * 新添教程
     * @param learn
     */
    @RequestMapping(value = "/add",method = RequestMethod.POST)
    @ResponseBody
    public AjaxObject addLearn(@RequestBody LearnResource learn){
        learnService.save(learn);
        return AjaxObject.ok();
    }

    /**
     * 修改教程
     * @param learn
     */
    @RequestMapping(value = "/update",method = RequestMethod.POST)
    @ResponseBody
    
            
           

相關推薦

Spring BootSpring Boot使用單元測試

前言這次來介紹下Spring Boot中對單元測試的整合使用,本篇會通過以下4點來介紹,基本滿足日常需求Service層單元測試Controller層單元測試新斷言assertThat使用單元測試的回滾正文Spring Boot中引入單元測試很簡單,依賴如下:1 2 3 4

深入AsyncioAsyncio與單元測試

function sync 寫代碼 cal 容器 關閉 pin testin cio Testing with asyncio 之前有說過應用開發者不需要將loop當作參數在函數間傳遞,只需要調用asyncio.get_event_loop()即可獲得。但是在寫單元測試時,

Spring Boot 入門報表匯出,對比poi、jxl和esayExcel的效率

本片部落格是緊接著Spring Boot 入門(十一):整合 WebSocket, 實時顯示系統日誌寫的 關於poi、jxl和esayExcel的介紹自行百度。 jxl最多支援03版excel,所以單個sheet頁面最多隻能匯出65536條資料。 我直接將excel匯入到瀏覽器並開啟,以下統計匯出時長指將資

Spring Boot教程整合elk1

分享圖片 operation you 運行 hot href iba for 分享 elk 簡介 Elasticsearch是個開源分布式搜索引擎,它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。

菜鳥調錯——Spring Boo+JPA方式報錯MappingException: Could not get constructor for org.hibernate.persister

文章目錄錯誤資訊軟體版本錯誤背景前提推理結束 錯誤資訊 018-10-04 15:58:02.540 ERROR 4572 --- [ main] o.s.boot.SpringApplication Application run failed org.s

spring-boot-route整合redis做為快取

## redis簡介 redis作為一種非關係型資料庫,讀寫非常快,應用十分廣泛,它採用key-value的形式儲存資料,value常用的五大資料型別有string(字串),list(連結串列),set(集合),zset(有序集合)和hash(雜湊表)。 redis的特性決定了它的功能,它可以用來做以下這

Spring原始碼解析——AOP原理——@EnableAspectJAutoProxy

一、@EnableAspectJAutoProxy 第一步:註冊AnnotationAwareAspectJAutoProxyCreator 把AnnotationAwareAspectJAutoProxyCreator建立為RootBeanDefinition,加入

Spring學習Spring 的配置檔案概述

我們應該怎麼理解和認識Spring的配置檔案呢?         其實,Spring的配置檔案是Spring容器對Bean進行生產以及關係注入的圖紙,他是Spring的基礎。如果我們沒有配置檔案的話,

spring-boot-routespring-boot-admin監控服務

`SpringBootAdmin`不是Spring官方提供的模組,它包含了`Client`和`Server`兩部分。server部分提供了使用者管理介面,client即為被監控的服務。client需要註冊到server端。 SpringBootAdmin提供了很少的幾個監控服務端點,需要依賴SpringBo

做一個合格的程式猿之淺析Spring IoC原始碼Spring refresh()方法解析後記1

上次分析refresh這塊spring IoC的時候,時間比較倉促,只是debug了部分原始碼,大家分析起來不是很好~ 今天我們還是先總結一下吧~ spring在例項化bean的時候,根據bean

做一個合格的程式猿之淺析Spring IoC原始碼Spring refresh()方法解析之一

經過上面幾節的簡單介紹我們瞭解了spring的一些元件,現在我們來分析一下AbstractApplicationContext中的refresh()這個核心方法吧~ 用我們上一節的程式碼,debug進入refresh方法: public void refresh() th

資料預處理系列用截斷奇異值分解降維

博主簡介:風雪夜歸子(英文名: Allen),機器學習演算法攻城獅,喜愛鑽研Machine Learning的黑科技,對Deep Learning和Artificial Intellige

Spring Boot Spring Boot 郵件服務

最早我們發郵件的時候是使用 JavaMail 來發送郵件,而在 Spring Boot 中, Spring Boot 幫我們將 JavaMail 封裝好了,是可以直接拿來使用的。 1. 依賴檔案 pom.xml 程式碼清單:spring-boot-mail/pom.xml *** <dependen

企業分布式微服務雲SpringCloud SpringBoot mybatis spring boot做調度任務

tro 一次 tis com href 什麽 init boot 2.6 構建工程 創建一個Springboot工程,在它的程序入口加上@EnableScheduling,開啟調度任務。 @SpringBootApplication @EnableScheduling p

Spring Boot單元測試JUnit

2.4 工具 num windows 地址 邏輯 分享圖片 enc 更正 一、介紹 JUnit是一款優秀的開源Java單元測試框架,也是目前使用率最高最流行的測試框架,開發工具Eclipse和IDEA對JUnit都有很好的支持,JUnit主要用於白盒測試和回歸測試。 白盒

Spring Boot 初級入門教程 —— 執行、測試、打包過程中碰到的各種錯誤

錯誤一:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project test-springboot: Compilation fail

Spring Boot 學習筆記——單元測試

依賴關係 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test&

spring boot整合hessian

1.首先新增hessian依賴 <dependency> <groupId>com.caucho</groupId> <artifactId>hessian</artifact

學習Spring Boot使用hibernate validation完成資料後端校驗

前言 後臺資料的校驗也是開發中比較注重的一點,用來校驗資料的正確性,以免一些非法的資料破壞系統,或者進入資料庫,造成資料汙染,由於資料檢驗可能應用到很多層面,所以系統對資料校驗要求比較嚴格且追求可變性及效率。 瞭解 瞭解一點概念性的東東。 * JSR 3

Spring Boot開發常用的熱部署方式彙總

前言平時開發Sprig Boot的時候,經常改動個小小的地方就要重新啟動專案,這無疑是一種很差的體驗。在此,博主收集了3種熱部署的方案供大家選擇。本文為轉載內容:Spring Boot乾貨系列:(十)開發常用的熱部署方式彙總正文目前博主用過的有三種:Spring Loaded