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

标签 android testing mockito powermock

我有考试

 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/

相关文章:

.net - 如何减少 .NET 中的 MSTest 执行时间?

junit - 如何模拟 SecurityContextHolder.getContext().getAuthentication().getCredentials()

java - 升级 Java 后,Mockito 验证方法因 Object...args 而失败

android - 上传图片时出现 java.lang.OutOfMemoryError

android - 在 AppAuth-Android 中注销

python - django.contrib.auth.models.User.DoesNotExist : User matching query does not exist

java - 用于整数的 Mockito 匹配器...参数

android - Cordova/Phonegap/Ionic App - 远程图像的本地存储

java - 在 Android 中膨胀 ListView 页脚的正确方法是什么?

java - 使用 Sonar(或其他)对测试进行依赖性分析