单元测试mockito

jopen 10年前

参考了http://qiuguo0205.iteye.com/blog/1456528 的博客,谢谢!

1、验证动作,我调用了哪些方法。

        List<String>  mockedList = mock(List.class);

        mockedList.add("one");

        verify(mockedList).add("one");

      相反的,还有没有调用哪些方法

        verify(mockedList,never()).add("one");

2、模拟一个接口,正常实现一个接口很麻烦的,但使用mockito,可以轻易实现

        List mockedList = mock(List.class);

        when(mockedList.get(0)).thenReturn("first");

        System.out.println(mockedList.get(0));

      如果你说我多次调用,返回不一样的值

      when(mockedList.get(1)).thenReturn("two").thenReturn("two1");

    System.out.println(mockedList.get(1));

    System.out.println(mockedList.get(1));      

    这个功能设计的,我无法形容,可以想想一个程序员被需求逼到什么程度。太佩服这哥们的脑子了!

3、验证各种动作

    

   List<String> mockedList = mock(List.class);

        // using mock

        mockedList.add("once");


        mockedList.add("twice");

        mockedList.add("twice");


        mockedList.add("three times");

        mockedList.add("three times");

        mockedList.add("three times");


        mockedList.add("five times");

        mockedList.add("five times");

       verify(mockedList).add("once");//验证.add("once")动作

       verify(mockedList, times(1)).add("once");//验证.add("once")动作发生一次。

        verify(mockedList, times(2)).add("twice");//两次

        verify(mockedList, times(3)).add("three times");//三此

        verify(mockedList, never()).add("never happened");   //从来没干过

        verify(mockedList, atLeastOnce()).add("three times");//最少一次

        verify(mockedList, atLeast(2)).add("five times");//最少两次

        verify(mockedList, atMost(5)).add("three times");//最多5次

4、伪造值

        List list = new LinkedList();

        List spy = spy(list);

        when(spy.size()).thenReturn(100);

        System.out.println(spy.get(0));

5、伪造动作 

          List mockedList =  mock(LinkedList.class ) ;

        doThrow(new RuntimeException()).when(mockedList).clear(); //当调用clear()时,抛个异常

        mockedList.clear();