Mockito:如何验证一个方法只被调用一次,确切的参数忽略了对其他方法的调用? [英] Mockito: How to verify a method was called only once with exact parameters ignoring calls to other methods?

查看:292
本文介绍了Mockito:如何验证一个方法只被调用一次,确切的参数忽略了对其他方法的调用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Java中使用Mockito如何验证一个方法只调用一次精确参数忽略对其他方法的调用?

Using Mockito in Java how to verify a method was called only once with exact parameters ignoring calls to other methods?

示例代码:

public class MockitoTest {

    interface Foo {
        void add(String str);
        void clear();
    }


    @Test
    public void testAddWasCalledOnceWith1IgnoringAllOtherInvocations() throws Exception {
        // given
        Foo foo = Mockito.mock(Foo.class);

        // when
        foo.add("1"); // call to verify
        foo.add("2"); // !!! don't allow any other calls to add()
        foo.clear();  // calls to other methods should be ignored

        // then
        Mockito.verify(foo, Mockito.times(1)).add("1");
        // TODO: don't allow all other invocations with add() 
        //       but ignore all other calls (i.e. the call to clear())
    }

}

应该在 TODO中做什么:不允许所有其他调用add()部分?

尝试失败:


  1. verifyNoMoreInteractions(foo);

  1. verifyNoMoreInteractions(foo);

不。它不允许调用其他方法,如 clear()

Nope. It does not allow calls to other methods like clear().


  1. verify(foo,times(0))。add(any());

  1. verify(foo, times(0)).add(any());

不。它没有考虑到我们允许一次调用 add(1)

Nope. It does not take into account that we allow one call to add("1").

推荐答案

Mockito.verify(foo, Mockito.times(1)).add("1");
Mockito.verify(foo, Mockito.times(1)).add(Mockito.anyString());

第一个验证检查预期的参数化调用第二个验证检查只有一次调用添加

The first verify checks the expected parametrized call and the second verify checks that there was only one call to add at all.

这篇关于Mockito:如何验证一个方法只被调用一次,确切的参数忽略了对其他方法的调用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆