首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有eq的Whitebox invokeMethod (“string”)

带有eq的Whitebox invokeMethod (“string”)
EN

Stack Overflow用户
提问于 2017-12-15 10:20:37
回答 1查看 811关注 0票数 0

我有考试

代码语言:javascript
复制
 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);

启动后,我得到以下错误:

代码语言:javascript
复制
 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可以很好地处理原语,而且没有对象。我该怎么办?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-18 04:57:44

代码语言:javascript
复制
Whitebox.invokeMethod(documentReceiverInteractor, "saveFields",
    anyString(), eq(text), anyString(),
    anyString(), anyString(), anyString(), anyString());

这句话毫无意义。对anyString()的调用等等都是对Mockito的信号,只有在对whenverify的调用中才有意义。它们的返回值是null0""或其他虚拟值以及它们的副作用是改变了莫奇托的内部状态;它们不是用于测试的随机或任意值,对于Whitebox也没有任何特殊行为。

(遮罩下,您使用来自eq(text)的返回值(即null )调用anyString(),并将其与您意外添加到参数匹配器堆栈中的对anyString()的调用进行匹配。

相反,选择特定的值:

代码语言:javascript
复制
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. */)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47830214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档