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")
}
添加回答
舉報