<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    一起學(xué)Mockito(一)

    共 4366字,需瀏覽 9分鐘

     ·

    2022-01-13 17:51

    項(xiàng)目太大,工程太多。不知道何時(shí)起,我們就沒了開發(fā)環(huán)境。代碼都是在預(yù)發(fā)環(huán)境上驗(yàn)證沒問題之后發(fā)到正式環(huán)境??傊痪湓挘镜卮a是跑不起來的,想要徒手抓bug,你就要擁有一定水平。假設(shè)跟作者一般菜,那就只能無限打印log日志了,主要是打了日志可別忘了刪。否則bug沒抓到,還被別人看到那亂七八糟的代碼怕是又要應(yīng)屆生同學(xué)一頓diss了。其實(shí)搭建一套開發(fā)環(huán)境理論是可行的,但是誰也撬不動(dòng)好幾個(gè)部門,即便撬動(dòng)了,弄出來怕是得個(gè)一兩年,所以就只能用單測自我安慰了。
    我以前認(rèn)為單元測試是建立在開發(fā)環(huán)境的基礎(chǔ)上的,但是現(xiàn)實(shí)是你沒有開發(fā)環(huán)境,用最簡單的基于函數(shù)的單測姿勢保證覆蓋率,說到這里總有種想要撂挑子的沖動(dòng)......但是那沒辦法,寫代碼從來都是一份搬磚的活,不是你一個(gè)enter鍵就可以宇宙大爆炸的,幾百行代碼的大函數(shù)足以讓你看透這輩子那回事,那就做個(gè)闡猴吧,雖然這過程過于痛苦,可人總歸是要老死的......
    Mockito是什么就不介紹了,就看看這玩意咋用吧,原理在前邊的文章已經(jīng)介紹過了。
    1、mockito驗(yàn)證值是否相等

    import org.junit.Test;import org.springframework.web.servlet.ModelAndView;
    import static org.junit.Assert.*;import static org.mockito.Mockito.mock;import static org.mockito.Mockito.when;
    public class HomeControllerTest {
    @Test public void index() { HomeController homeController =mock(HomeController.class); //打樁 when(homeController.index()).thenReturn(new ModelAndView("index")); ModelAndView modelAndView = homeController.index(); System.out.println(modelAndView.getViewName()); assertSame(modelAndView.getViewName(),"index"); } }
    2、打樁判斷調(diào)用的次數(shù)
        @Test    public void index() {        HomeController homeController =mock(HomeController.class);        when(homeController.index()).thenReturn(new ModelAndView("index")).thenReturn(new ModelAndView("zhang"));        ModelAndView modelAndView = homeController.index();        System.out.println(modelAndView.getViewName());        assertSame(modelAndView.getViewName(),"index");        modelAndView = homeController.index();        System.out.println(modelAndView.getViewName());        Mockito.verify(homeController,times(2)).index();    }
    3、參數(shù)匹配
    有時(shí)候我們調(diào)一個(gè)函數(shù)的輸入很隨意的,總不能給其逐個(gè)設(shè)置值吧,所以這塊要用到匹配去做。
        @Test    public void dapan() {        ModelAndView modelAndView=null;????????//spy用來創(chuàng)建一個(gè)實(shí)體對象,會(huì)執(zhí)行指定的調(diào)用方法。        HomeController homeController =  spy(HomeController.class);        //在調(diào)用層設(shè)置mock對象,mock用來創(chuàng)建一個(gè)假對象,執(zhí)行方法的時(shí)候什么都不做,直接返回值????????StockService?stockService?=?mock(StockService.class);        homeController.setStockService(stockService);        List result = new ArrayList<>();        List candidateStockPos=new ArrayList<>();        result.add(new ShowTimeVo("2022-01-10",1));        result.add(new ShowTimeVo("2022-01-09",1));        result.add(new ShowTimeVo("2022-01-08",1));        CandidateStockPo candidateStockPo = new CandidateStockPo();        candidateStockPo.setWenyuRiver(0);        candidateStockPo.setShowCode("sh.00001");        candidateStockPo.setIndustry("1");        candidateStockPo.setCv(1);        candidateStockPo.setZsm(1);        candidateStockPos.add(candidateStockPo);????????//對stockservice進(jìn)行打樁        when(stockService.queryShowTime()).thenReturn(result);        //進(jìn)行參數(shù)匹配        when(stockService.stockToday(anyString(),anyList())).thenReturn(candidateStockPos);        modelAndView=homeController.today("1","");        System.out.println(modelAndView.getViewName());        assertSame("today",modelAndView.getViewName());    }

    4、.驗(yàn)證函數(shù)的確切、最少、從未調(diào)用次數(shù)

            //at least        Mockito.verify(stockService,atLeast(1)).queryShowTime();        //at most        Mockito.verify(stockService,atMost(1)).queryShowTime();        //equals        Mockito.verify(stockService,times(1)).queryShowTime();
    5、拋出異常
        @Test    public void today() {        HomeController homeController = spy(HomeController.class);        StockService stockService = mock(StockService.class);        homeController.setStockService(stockService);        when(stockService.tongji(anyString())).thenThrow(new Exception("123"));        try {            homeController.today("1","1");        }catch (Exception e){            e.printStackTrace();        }    }
    6、代碼執(zhí)行的順序
        @Test    public void about() {        //create empty object        List tianjingle = mock(List.class);
    // tianjingle.add("one"); tianjingle.add("two");
    InOrder inOrder = inOrder(tianjingle);
    inOrder.verify(tianjingle).add("one"); inOrder.verify(tianjingle).add("two");
    List firstMock = mock(List.class); List secondMock = mock(List.class);
    firstMock.add("one"); secondMock.add("1");
    InOrder inOrder1 = inOrder(firstMock, secondMock);
    inOrder1.verify(firstMock).add("one"); inOrder1.verify(secondMock).add("1"); }
    可能是鍵盤的原因,我愛上mockito了~~~,明晚咋繼續(xù)!

    晚安


    瀏覽 52
    點(diǎn)贊
    評論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評論
    圖片
    表情
    推薦
    點(diǎn)贊
    評論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    干老女人视频 | 久久婷婷无码视频 | 内射极品在线观看免费 | av片在线观看 | 人妻夜夜爽天天爽麻豆三区视频 |