gpt4 book ai didi

android - 带有 eq ("string"的白盒 invokeMethod )

转载 作者:行者123 更新时间:2023-11-28 21:08:15 25 4
gpt4 key购买 nike

我有考试

 Document document = spy(new Document());
Whitebox.setInternalState(documentReceiverInteractor, "document", document);

String text= "string";

Whitebox.invokeMethod(documentReceiverInteractor, "saveFields", anyString(), eq(text), anyString(),
anyString(), anyString(), anyString(), anyString());

verify(document).setText(text);

启动后,我得到这个错误:

 Argument(s) are different! Wanted:
document.setText(
<any string>
);
-> at ru.psbank.msb.dev.business.document.edit.receiver.DocumentReceiverInteractorTest.saveFields(DocumentReceiverInteractorTest.java:98)
Actual invocation has different arguments:
document.setText(
null
);

eq 可以很好地处理基元并且没有对象。我应该怎么办?

最佳答案

Whitebox.invokeMethod(documentReceiverInteractor, "saveFields",
anyString(), eq(text), anyString(),
anyString(), anyString(), anyString(), anyString());

这个说法没有道理。对 anyString() 等的调用是 Mockito 的信号只有在对 whenverify< 的调用中才有意义。它们的返回值为 null0"" 或其他虚拟值,以及 their side effects are to modify Mockito's internal state ;它们不是用于测试的随机或任意值,并且对白盒没有任何特殊行为。

(在后台,您使用 eq(text) 的返回值调用 setText,它是 null,并匹配它针对您不小心添加到参数匹配器堆栈的 anyString() 调用之一。)

相反,选择特定值:

Whitebox.invokeMethod(documentReceiverInteractor, "saveFields",
"string 1",
text,
"string 2",
"string 3",
"string 4",
"string 5",
"string 6");

...而不是使用 Whitebox ,它在 Mockito 的 internalorg.mockito.internal.util.reflection 中并且是 deleted in Mockito 2.2 ,您应该考虑使方法调用更加可见(如果您的测试在同一个包中,则为包私有(private),否则为公共(public))。毕竟,您的测试是您类(class)的消费者。如果您选择走那条路,请考虑添加 @VisibleForTesting或其他一些文档(如 /** Visible for testing. */)。

关于android - 带有 eq ("string"的白盒 invokeMethod ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47830214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com