2 回答
TA贡献1820条经验 获得超2个赞
您可以创建自己的:matcher
public class MyVarargMatcher extends ArgumentMatcher<String[]> implements VarargMatcher
{
private String expectedFirstValue;
public MyVarargMatcher(String expectedFirstValue)
{
this.expectedFirstValue = expectedFirstValue;
}
@Override
public boolean matches(Object varargArgument) {
if (varargArgument instanceof String[])
{
String[] args = (String[]) varargArgument;
return Stream.of(args).anyMatch(expectedFirstValue::equals);
}
return false;
}
}
然后像这样使用它(Java代码):
Foo foo = Mockito.mock(Foo.class);
Mockito.doReturn(true).when(foo).bar(Mockito.argThat(new MyVarargMatcher("AAA")));
编辑了op的评论:只要“AAA”是参数之一,它应该返回true
TA贡献2019条经验 获得超9个赞
您必须将方法存根2次。首先是最不具体的存根:
val foo = Foo()
whenever(foo.bar(any())).thenReturn(false) // or whatever you want to return/throw here
然后是更具体的单参数方法:
whenever(foo.bar(eq("AAA"))).thenReturn(true)
在你的评论之后,你也可以使用这样的东西(这次使用Java):
when(foo.bar(any())).thenAnswer(invocation -> {
for (Object argument : invocation.getArguments()) {
if ("AAA".equals(argument)) return true;
}
return false;
});
在 Kotlin 中也是如此
whenever(foo.bar(any()).thenAnswer {
it.arguments.contains("AAA")
}
添加回答
举报