美文网首页
Mockito模拟返回类型为void的方法

Mockito模拟返回类型为void的方法

作者: 一路花开_8fab | 来源:发表于2019-04-15 17:28 被阅读0次

该系列文章翻译自https://www.baeldung.com/mockito-series

void类型的方法可以使用Mockito的doNothing()、doThrow()、doAnswer() 和doCallRealMethod()进行模拟。下面使用MyList类进行介绍

public class MyList extends AbstractList<String> {

    @Override
    public String get(final int index) {
        return null;
    }
    @Override
    public int size() {
        return 1;
    }

    @Override
    public void add(int index, String element) {
        // no-op
    }
}

1. doNothing()

doNothing()是Mockito在处理void类型方法的默认操作,以下两种方式是等价的:

@Test
public void whenAddCalledVerfied() {
    MyList myList = mock(MyList.class);
    doNothing().when(myList).add(isA(Integer.class), isA(String.class));
    myList.add(0, "");
  
    verify(myList, times(1)).add(0, "");
}
@Test
public void whenAddCalledVerfied() {
    MyList myList = mock(MyList.class);
    myList.add(0, "");
  
    verify(myList, times(1)).add(0, "");
}

doNothing()可以和参数捕获器一起使用,从而校验方法的参数,如下:

@Test
public void whenAddCalledValueCaptured() {
    MyList myList = mock(MyList.class);
    ArgumentCaptor valueCapture = ArgumentCaptor.forClass(String.class);
    doNothing().when(myList).add(any(Integer.class), valueCapture.capture());
    myList.add(0, "captured");
  
    assertEquals("captured", valueCapture.getValue());
}

2. doThrow()

doThrow用于产生异常

  @Test(expected = RuntimeException.class)
    public void givenNull_AddThrows() {
        MyList myList = mock(MyList.class);
        doThrow(RuntimeException.class).when(myList).add(isA(Integer.class), isNull());

        myList.add(0, null);
    }

3. doAnswer()

可以再doAnswer()中添加更多的校验细节,在下面的例子中,对方法的参数进行了校验。

@Test
public void whenAddCalledAnswered() {
    MyList myList = mock(MyList.class);
    doAnswer((Answer) invocation -> {
        Object arg0 = invocation.getArgument(0);
        Object arg1 = invocation.getArgument(1);
         
        assertEquals(3, arg0);
        assertEquals("answer me", arg1);
        return null;
    }).when(myList).add(any(Integer.class), any(String.class));
    myList.add(3, "answer me");
}

4. doCallRealMethod()

doCallRealMethod()用于调用真实的方法

@Test
public void whenAddCalledRealMethodCalled() {
    MyList myList = mock(MyList.class);
    doCallRealMethod().when(myList).add(any(Integer.class), any(String.class));
    myList.add(1, "real");
  
    verify(myList, times(1)).add(1, "real");
}

相关文章

  • Mockito模拟返回类型为void的方法

    该系列文章翻译自https://www.baeldung.com/mockito-series void类型的方法...

  • 使用Mockito模拟异常

    接下来我们将以MyDictionary类为例进行介绍 1 Mock对象模拟异常 1.1 方法返回类型非void 如...

  • 缓存

    在使用CacheUtil.putMessageCache()方法时,如果设置该方法返回类型为void则在使用Cac...

  • 你知道void和Void的区别吗?

    ​ 区别 void 用于无返回值的方法定义。 Void Void是void的包装方法,和其他基础类型的包装方法不同...

  • Java入门系列-12-成员方法

    类的方法 无参方法 语法: 敲一敲:无返回值方法 没有返回值返回值类型为 void ,上例中是无返回值。如果方法中...

  • java-构造器

    方法能返回任何类型的值或者无返回值(void),构造器没有返回值,也不需要void。

  • JAVA编程基础之方法深入

    方法深入 void 关键字 一个 void方法,它不返回任何值。 一个带有返回值类型的方法,必须带出返回值。 re...

  • powermock series 1

    PowerMock-and-Mockito-Learning 使用实例 1. 模拟接口返回 InterfaceTo...

  • 如何模拟返回值为void的静态方法

      在编写代码时,经常需要调用别人已经写好的工具类方法,而这些方法经常又是使用静态方法实现的。而我们在测试自己的代...

  • 进阶课

    1.构造函数 (1)构造方法的方法名必须与类名相同。(2)构造方法没有返回类型,也不能定义为void,在方法名前面...

网友评论

      本文标题:Mockito模拟返回类型为void的方法

      本文链接:https://www.haomeiwen.com/subject/dncpwqtx.html