SpringBoot2學習筆記(六)單元測試

2021-08-20 22:29:46 字數 2747 閱讀 5115

單元測試對提高**質量,重構**都有極大的作用!個人平時也比較注重單元測試的編寫,以上是閱讀《springboot 2精髓》一書的個人總結。

首先是介紹下junit的相關概念。

概念說明

assert

測試條件,當條件不成立時丟擲異常。如:assert.assertsame(message, expected, actual)判斷expected物件和actual是否同乙個物件(==),不同則丟擲異常提示message的資訊。

suite

suite允許將多個測試類歸成一組。在測試類(可空類)加註解@runwith(suite.class)和@suiteclass()。

runner

runner類用來允許測試。junit沒有main()方法入口,其實在org.junit.runner包下有個junitcore.class,其中存在乙個標準main方法,這就是junit的入口函式。

dao層的測試需要準備乙個空資料庫,以及一些初始化的資料,使用@sql註解來初始化。

insert into `user` (`user_id`, `name`) values (99, '哈哈');
下面來看示例的測試**:

// @activeprofiles啟用test作為profile,使用準備好的空資料庫

@activeprofiles("test")

// @transactional測試執行後回滾資料

@transactional

// 『/』開頭表示從classpath根目錄開始搜尋,沒有以此開頭預設在測試類所在包下。也可使用classpath:、file:、http: 開頭

@sql()

// @runwith是junit標準的乙個註解,spring的單元測試都用springrunner.class

@runwith(springrunner.class)

// @springboottest用於spring boot應用測試,預設根據報名逐級往上尋找應用啟動類

@springboottest

public

class

userdaotest

}

service層是處理業務邏輯的地方,通常比較複雜,編寫單元測試**前需要處理好以下三個問題:

如何解決呢?

下面來看一下使用mockito解決第二個問題的示例。

假設現有userservice依賴於creditsystemservice,但是creditsystemservice並沒有實現類

@transactional

@springboottest

@runwith(springrunner.class)

public

class

userserviceimpltest

}

spring mvc test 通過@webmvctest來完成mvc單元測試。示例**如下:

@runwith(springrunner.class)

// @webmvctest表示這是乙個mvc測試,可傳入多個待測試的controller。

@webmvctest(usercontroller.class)

public

class

usercontrollertest ", userid))

.andexpect(mockmvcresultmatchers.content().string(string.valueof(100)));

}}

mockmvc的核心方式是public resultactions perform(requestbuilder requestbuilder),下面是一些模擬請求示例:

模擬get請求:

mockmvc.perform(mockmvcrequestbuilders.get("/user/", userid));
模擬post請求:

mockmvc.perform(mockmvcrequestbuilders.post("uri", parameters));
模擬檔案上傳:

mockmvc.perform(mockmvcrequestbuilders.multipart("uri").file("filename", "file"

.getbytes("utf-8")));

模擬session和cookie:

mockmvc.perform(mockmvcrequestbuilders.get("uri").sessionattr("name", "value"));

mockmvc.perform(mockmvcrequestbuilders.get("uri").cookie(new cookie("name", "value")));

設定http header:

mockmvc.perform(mockmvcrequestbuilders

.get("uri", parameters)

.header("", ""));

本次所有示例的**:傳送門

Springboot2 學習筆記五

1 目標方法處理的過程中,所有資料都會被放在 modelandviewcontainer 裡面。包括資料和檢視位址 2 方法的引數是乙個自定義型別物件 從請求引數中確定的 把他重新放在 modelandviewcontainer 3 任何目標方法執行完成以後都會返回 modelandview 資料和...

SpringBoot2啟動流程

springboot如果要說是springframework的封裝那麼也不全是,個人認為從思想上來說是兩個東西。springboot主要具備如下特性 1.自動裝配 2.內建tomcat等web容器 3.與devops天然整合,這也可以認為是微服務的特點。下面咱們看下 public class pub...

SpringBoot2 擴充套件介面

判斷乙個框架或者程式的好壞直觀的方法就是看其擴充套件性如何。毫無疑問spring擴充套件性這方面做的不錯。說到擴充套件主要還是在容器的refresh這塊,也有listener 這一塊先放放 實現原則嚴格按照開閉原則,內部修改關閉,對擴充套件開放 咱們先看一張流程圖 如上圖中主要的畫出來了具體的執行流...