如何使用变量参数模拟方法 concatenate(String... messages)
如果我将参数传递为
String[] messages = {"abc"};
Helper helper = mock(Helper.class);
doReturn(someStr).when(helper).concatenate(messages);
这是行不通的。
老实说,我没有看到问题。让我们试试...
假设我们有这个类...
public class Helper {
public String concatenate(String...strings) {
// ...some concat logic, not important
}
}
。现在我们想嘲笑它...
@Test
public void testSomething() {
Helper helper = Mockito.mock(Helper.class);
Mockito.doReturn("blablub").when(helper).concat(Mockito.anyVararg());
Assertions.assertThat(helper.concat("bla", "bli")).isEqualTo("blablub");
}
是的,这有效。我们给它"bla"和"bli",但是因为我们告诉模拟在任何情况下都返回"blablub",所以我们得到了结果。所以嘲笑任何瓦拉格都很容易......当然,我们也只能检查整个 vararg 的一部分,例如......
Mockito.doReturn("blablub").when(helper).concat(Mockito.anyString(), Mockito.eq("blub"), Mockito.anyVararg());
Assertions.assertThat(helper.concat("bli", "blub", "bla", "blu", "blo")).isEqualTo("blablub");
。只要第二个参数是"blub",它将返回"blablub",无论其他参数是什么。
最好使用反射方法来启动字符串值
FieldUtils.writeField(testClass, "stringVariableName", "value", true(;