如何使用变量参数模拟方法,例如concatenate(String ... messages)

时间:2017-05-23 11:44:34

标签: java mockito junit4

如何使用变量参数concatenate(String... messages)

模拟方法

如果我将参数传递为

String[] messages = {"abc"};
Helper helper = mock(Helper.class);
doReturn(someStr).when(helper).concatenate(messages);

它无效。

2 个答案:

答案 0 :(得分:0)

老实说,我没有看到问题。我们来试试吧......

我们假设我们有这个班级......

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都很容易......我们当然也只能检查整个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”。

答案 1 :(得分:-1)

最好使用反射方法来初始化字符串值

FieldUtils.writeField(testClass, "stringVariableName", "value", true);