当前位置: 首页 > 面试题库 >

Java 如何在Mockito中正确匹配varargs

巩衡
2023-03-14
问题内容

我一直在尝试使用Mockito模拟具有vararg参数的方法:

interface A {
  B b(int x, int y, C... c);
}

A a = mock(A.class);
B b = mock(B.class);

when(a.b(anyInt(), anyInt(), any(C[].class))).thenReturn(b);
assertEquals(b, a.b(1, 2));

这不起作用,但是如果我改为这样做:

when(a.b(anyInt(), anyInt())).thenReturn(b);
assertEquals(b, a.b(1, 2));

尽管我在对方法进行存根时已经完全省略了varargs参数,但这仍然有效。

有什么线索吗?


问题答案:

Mockito 1.8.1引入了anyVararg()匹配器:

when(a.b(anyInt(), anyInt(), Matchers.<String>anyVararg())).thenReturn(b);

另请参阅历史记录:https : //code.google.com/archive/p/mockito/issues/62

弃用后编辑新语法:

when(a.b(anyInt(), anyInt(), ArgumentMatchers.<String>any())).thenReturn(b);


 类似资料:
  • 问题内容: 争论的Mockito匹配器(如,,,,和)从Hamcrest匹配器表现非常不同。 匹配器经常导致,即使在使用任何匹配器很长时间后执行的代码中也是如此。 匹配器遵循怪异的规则,例如,如果给定方法中的一个参数使用匹配器,则仅要求对所有参数使用Mockito匹配器。 当覆盖或使用时,匹配器可能导致 。 使用Mockito匹配器以某些方式重构代码会产生异常和意外行为,并且可能会完全失败。 为什

  • 我试图检查字符串是否包含完全匹配。例如: String str="这是我的字符串,具有-Policy和-p" 我怎样才能做到以下几点:

  • 问题内容: 我正在寻找一个正则表达式来匹配Java源代码中的字符串文字。 可能吗? 我的意图是用其他东西替换另一个字符串中的所有字符串。使用: 这样的事情。 问题答案: 好。那么,您想要在字符串中搜索以双引号开头和结尾的一系列字符吗? 注意非贪婪模式。

  • 我想做一个像彩票一样的程序,中奖号码是随机生成的。 我使用了,如果用户猜到了所有6个数字。 如果用户只能猜测5位数字,我应该用什么方法从随机生成的数字中计算出5个正确的数字? 代码是: 类是,和

  • Mockito参数匹配器(例如、、、和)的行为与Hamcrest匹配器非常不同。 > Mockito匹配器经常导致InvalidUseOfMatchersException,即使在使用任何匹配器之后很久才执行的代码中也是如此。 Mockito匹配器受制于奇怪的规则,例如,只有当给定方法中的一个参数使用匹配器时,才要求对所有参数使用Mockito匹配器。 Mockito匹配器在重写s或使用等时会导致

  • 问题内容: 我有这样声明的方法 这个枚举 问题:如何模拟通话?我无法比拟。 以下无效: 问题答案: 将达到目的: 附带说明:考虑使用静态导入: 模拟变得更短: