我有考试
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可以很好地处理原语,而且没有对象。我该怎么办?
发布于 2017-12-18 04:57:44
Whitebox.invokeMethod(documentReceiverInteractor, "saveFields",
anyString(), eq(text), anyString(),
anyString(), anyString(), anyString(), anyString());这句话毫无意义。对anyString()的调用等等都是对Mockito的信号,只有在对when和verify的调用中才有意义。它们的返回值是null、0、""或其他虚拟值以及它们的副作用是改变了莫奇托的内部状态;它们不是用于测试的随机或任意值,对于Whitebox也没有任何特殊行为。
(遮罩下,您使用来自eq(text)的返回值(即null )调用anyString(),并将其与您意外添加到参数匹配器堆栈中的对anyString()的调用进行匹配。
相反,选择特定的值:
Whitebox.invokeMethod(documentReceiverInteractor, "saveFields",
"string 1",
text,
"string 2",
"string 3",
"string 4",
"string 5",
"string 6");...and不应该使用白盒,它位于Mockito的internal package org.mockito.internal.util.reflection中,是删除Mockito 2.2,您应该考虑使方法调用更加可见(如果您的测试在同一个包中,那么包是私有的,否则是公开的)。毕竟,你的考试是你班上的一个消费者。如果选择这样做,请考虑添加@VisibleForTesting或其他文档(如/** Visible for testing. */)。
https://stackoverflow.com/questions/47830214
复制相似问题