关于Mockito学习的一点自己的理解

1. 如果要使用@Mockito ,则要加入MockitoAnnotations.initMocks

MockitoAnnotations.initMocks 放在 junit 的 @Before 注解修饰的函数中更合适。

MockitoAnnotations.initMocks 的一个替代方案是使用 MockitoJUnitRunner 。

 2.一些注意点:

1.Dao层测试,直接用一些模拟数据,插入数据库,看看测试是否成功

2.Service主要来测试缓存的

3. web直接用Mock进行来测试

3. 使用方式:

方式一:

@Test
    public void queryx() {
        String pin = "testPin";
        String ip = "127.0.0.1";
        when(XXXJsf.getPreSwitch(any(XXXXReq.class))).thenAnswer(new Answer<Object>() {
            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                GenericResult<XXXX> genericResult = new GenericResult<>();
                XXXX xjkCashierTradeRes = new xxx();
                //符合切量
                XXXXXRes.setxxxx(true);
                //成功
                genericResult.setSuccess(true);
                genericResult.setCode("0000");
                genericResult.setValue(XXXX);
                return genericResult;
            }
        });
下面一定要写调用的具体接口
ResponseVo<XXXXX> responseVo = XXXXX.XXXX(pin, "127.0.0.1");
log.info("XXXXX.res:{}", GsonUtils.toJson(responseVo));
 

方式二:

调用的时候会直接抛出异常信息,如果想让起抛出异常信息,则直接使用这个方式
@Test
public void testMktSaleOrder() throws Exception { String message = "XXXXX"; try {
        //注意下面两行代码的位置不能交换,必须先去定义调用就去抛出异常信息 doThrow(RuntimeException.
class).when(XXXXJSF).asynxxxxeStock(any(XXXXckReq.class)); XXXXX.onMessage(message); } catch (Exception e) { } }

方式三:

@Before
    public void setup() {
        doReturn(1).when(XXXXXDao).insert(any(XXXXXXPo.class));
        doReturn(1).when(xxxDao).updateByxxxxId(any(XXXXXXPo.class));
        when(scoreXXXXDao.queryByIdxxxx(anyString())).then(invocationOnMock -> this.XXXXPo());
        when(scorXXXXDao.queryByConditionXXXX(any(XXXXXPo.class))).then(invocationOnMock -> {
            Page page = new Page();
            page.add(this.xxxxxPo());
            return page;
        });
    }

 

原文地址:https://www.cnblogs.com/cxy2020/p/13825354.html