一起学Mockito(一)

共 4366字,需浏览 9分钟

 ·

2022-01-13 17:51

项目太大,工程太多。不知道何时起,我们就没了开发环境。代码都是在预发环境上验证没问题之后发到正式环境。总之一句话,本地代码是跑不起来的,想要徒手抓bug,你就要拥有一定水平。假设跟作者一般菜,那就只能无限打印log日志了,主要是打了日志可别忘了删。否则bug没抓到,还被别人看到那乱七八糟的代码怕是又要应届生同学一顿diss了。其实搭建一套开发环境理论是可行的,但是谁也撬不动好几个部门,即便撬动了,弄出来怕是得个一两年,所以就只能用单测自我安慰了。
我以前认为单元测试是建立在开发环境的基础上的,但是现实是你没有开发环境,用最简单的基于函数的单测姿势保证覆盖率,说到这里总有种想要撂挑子的冲动......但是那没办法,写代码从来都是一份搬砖的活,不是你一个enter键就可以宇宙大爆炸的,几百行代码的大函数足以让你看透这辈子那回事,那就做个阐猴吧,虽然这过程过于痛苦,可人总归是要老死的......
Mockito是什么就不介绍了,就看看这玩意咋用吧,原理在前边的文章已经介绍过了。
1、mockito验证值是否相等

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、打桩判断调用的次数
    @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、参数匹配
有时候我们调一个函数的输入很随意的,总不能给其逐个设置值吧,所以这块要用到匹配去做。
    @Test    public void dapan() {        ModelAndView modelAndView=null;        //spy用来创建一个实体对象,会执行指定的调用方法。        HomeController homeController =  spy(HomeController.class);        //在调用层设置mock对象,mock用来创建一个假对象,执行方法的时候什么都不做,直接返回值        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进行打桩        when(stockService.queryShowTime()).thenReturn(result);        //进行参数匹配        when(stockService.stockToday(anyString(),anyList())).thenReturn(candidateStockPos);        modelAndView=homeController.today("1","");        System.out.println(modelAndView.getViewName());        assertSame("today",modelAndView.getViewName());    }

4、.验证函数的确切、最少、从未调用次数

        //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、代码执行的顺序
    @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了~~~,明晚咋继续!

晚安


浏览 35
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报