單元測試對提高**質量,重構**都有極大的作用!個人平時也比較注重單元測試的編寫,以上是閱讀《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 這一塊先放放 實現原則嚴格按照開閉原則,內部修改關閉,對擴充套件開放 咱們先看一張流程圖 如上圖中主要的畫出來了具體的執行流...