spring boot 編寫單元測試

1.開始之前

  • IDE:Intellij idea
  • 依賴jar包 : spring-boot-starter-test
  1. 生成測試類
    快捷方式:鼠標(biāo)移動到要測試的類上 按下 alt+enter
    需要的注解:
@RunWith(SpringRunner.class)
@SpringBootTest
@Test

ex:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ClassServiceTest { 
  @Test
    public void addInfo()
    {
    }
}   

3.使用斷言assertThat
assertThat 基本語法

assertThat( [value], [matcher statement] );

  • value 是接下來想要測試的變量值拣宰;
  • matcher statement 是使用 Hamcrest 匹配符來表達的對前面變量所期望的值的聲明,如果 value 值與 matcher statement 所表達的期望值相符办成,則測試成功门躯,否則測試失敗年局。
  1. Hamcrest 匹配符
    API:http://hamcrest.org/JavaHamcrest/javadoc/2.0.0.0/

5.Controller單元測試
上面只是針對Service層做測試炮车,但是有時候需要對Controller層(API)做測試映屋,這時候就得用到MockMvc了崎岂,你可以不必啟動工程就能測試這些接口。

MockMvc實現(xiàn)了對Http請求的模擬,能夠直接使用網(wǎng)絡(luò)的形式絮蒿,轉(zhuǎn)換到Controller的調(diào)用尊搬,這樣可以使得測試速度快、不依賴網(wǎng)絡(luò)環(huán)境土涝,而且提供了一套驗證的工具毁嗦,這樣可以使得請求的驗證統(tǒng)一而且很方便。

Controller類:

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
    public AjaxObject updateLearn(@RequestBody LearnResource learn){
        learnService.updateNotNull(learn);
        return AjaxObject.ok();
    }

    /**
     * 刪除教程
     * @param ids
     */@Test
@Transactional
public void add(){
    LearnResource bean = new LearnResource();
    bean.setAuthor("測試回滾");
    bean.setTitle("回滾用例");
    bean.setUrl("http://tengj.top");
    learnService.save(bean);
}
    @RequestMapping(value="/delete",method = RequestMethod.POST)
    @ResponseBody
    public AjaxObject deleteLearn(@RequestBody Long[] ids){
        learnService.deleteBatch(ids);
        return AjaxObject.ok();
    }

    /**
     * 獲取教程
     * @param id
     */
    @RequestMapping(value="/resource/{id}",method = RequestMethod.GET)
    @ResponseBody
    public LearnResource qryLearn(@PathVariable(value = "id") Long id){
       LearnResource lean= learnService.selectByKey(id);
        return lean;
    }
}

6.單元測試回滾

單元個測試的時候如果不想造成垃圾數(shù)據(jù)回铛,可以開啟事物功能,記在方法或者類頭部添加@Transactional注解即可,如下:

@Test
@Transactional
public void add(){
    LearnResource bean = new LearnResource();
    bean.setAuthor("測試回滾");
    bean.setTitle("回滾用例");
    bean.setUrl("http://tengj.top");
    learnService.save(bean);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末克锣,一起剝皮案震驚了整個濱河市茵肃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌袭祟,老刑警劉巖验残,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異巾乳,居然都是意外死亡您没,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門胆绊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氨鹏,“玉大人,你說我怎么就攤上這事压状∑偷郑” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵种冬,是天一觀的道長镣丑。 經(jīng)常有香客問我,道長娱两,這世上最難降的妖魔是什么莺匠? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮十兢,結(jié)果婚禮上趣竣,老公的妹妹穿的比我還像新娘。我一直安慰自己纪挎,他們只是感情好期贫,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著异袄,像睡著了一般通砍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天封孙,我揣著相機與錄音迹冤,去河邊找鬼。 笑死虎忌,一個胖子當(dāng)著我的面吹牛泡徙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膜蠢,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼堪藐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了挑围?” 一聲冷哼從身側(cè)響起礁竞,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎杉辙,沒想到半個月后模捂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡蜘矢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年狂男,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片品腹。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡岖食,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出珍昨,到底是詐尸還是另有隱情县耽,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布镣典,位于F島的核電站兔毙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏兄春。R本人自食惡果不足惜澎剥,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赶舆。 院中可真熱鬧哑姚,春花似錦、人聲如沸芜茵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽九串。三九已至绞佩,卻和暖如春寺鸥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背品山。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工胆建, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肘交。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓笆载,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涯呻。 傳聞我的和親對象是個殘疾皇子凉驻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 這次來介紹下Spring Boot中對單元測試的整合使用,本篇會通過以下4點來介紹复罐,基本滿足日常需求 Ser...
    嘟爺MD閱讀 7,086評論 14 177
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理沿侈,服務(wù)發(fā)現(xiàn),斷路器市栗,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,827評論 6 342
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,414評論 1 92
  • 上班的時候咳短,突然走神了填帽,很向往外邊的世界,陽光咙好,藍天篡腌,郁郁蔥蔥…還有三天,就可以全身心投入到愉快的假日了勾效,即使哪里...
    朵唯唯閱讀 151評論 0 0