Mockito初探(一)—— 初识

2019-05-05  本文已影响0人  Cloneable

之前的工作中对业务接口的测试仅仅停留在postman请求一下,验证一下接口是否出现异常而已,单元测试基本属于空白,新工作中对单元测试的要求较高,于是在完成接口的代码之外还需要完成相应的单元测试,在单元测试中为避免第三方接口对测试结果的影响,遂使用了Mockito,在这样的情况下结识了Mockito。

Mockito的应用场景如上所述,而官网肯定会对自己的框架大肆夸赞一番,可以写出更加优美的测试代码,可阅读性高的测试代码以及清晰的验证错误结果云云,这些在使用Mockito时都可以自己感受,也可以点击跳转Mockito官网亲自喝下这碗官网鸡汤。

Mockito的使用也十分简单,只要引入mockito-core的jar包就可以使用,建议配上junit食用效果更佳,接下来展示两个Mockito的基本使用例子作为此章节的结束。

import static org.mockito.Mockito.*;
@Test
public void simpleVerifyTest() {
    // create a mock of List
    List mockList = mock(List.class);

    // call add and clear method of mocked List
    mockList.add("123");
    mockList.clear();

    // verify interaction of mocked List
    verify(mockList).add("123");
    verify(mockList).clear();
}

verify可以验证被mock的对象是否进行了相应的操作,如果未进行相应的操作会抛出异常,例如将verify(mockList).add("123")修改为verify(mockList).add("12")将会获得如下错误信息。

verify失败时异常信息
@Test
public void simpleStubbingTest() {
    // create a mock of ArrayList
    ArrayList mockList = mock(ArrayList.class);

    // stubbing
    when(mockList.get(0)).thenReturn("first element");
    when(mockList.get(1)).thenThrow(new RuntimeException("mockList.get(1)"));

    // prints "first element"
    System.out.println(mockList.get(0));

    // throws RuntimeException
    System.out.println(mockList.get(1));

    // prints null
    System.out.println(mockList.get(999));

    verify(mockList).get(0);
}

其实从代码上也看得出,所谓的stubbing其实就是对被mock对象的相应操作配置了相应的影响,当被mock对象进行相应操作时就会得到相应的响应,当mock对象的操作没有被stubbing时调用相应操作会返回适当的默认值。

另外对已经被stubbing的操作是不推荐使用verify的,因为使用verify意味着对操作的结果是不关心的,那相应操作就没必要进行stubbing,如果对操作的结果关注,那操作结果肯定在verify之前已经获得,也就没有必要使用verify了。


本章节代码可以点击跳转GitHub查看

上一篇下一篇

猜你喜欢

热点阅读