如何使用变量参数模拟方法,例如连接(字符串..消息)



如何使用变量参数模拟方法 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(;

相关内容

  • 没有找到相关文章

最新更新