Method of ContentValues is not mocked(ContentValues 的方法未被模拟)
问题描述
我正在使用 Mockito 创建一个测试.在测试中,我创建了一个 ContentValues 类型的对象.当我运行这个测试时,我得到了错误:
I'm creating a test with Mockito. In the test, I'm creating an object of type ContentValues. When I run this test, I'm getting error:
java.lang.RuntimeException: Method put in android.content.ContentValues not mocked.
这是最少的代码:
import android.content.ContentValues;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {
@Test
public void test1() {
ContentValues cv = new ContentValues();
cv.put("key", "value");
}
}
如何避免此错误?
推荐答案
你正在使用一个为模拟而设计的库,它缺乏实现.因为您的测试实际上调用了对象上的方法,而不使用模拟库来赋予它行为,所以它给了您该消息.
You are using a library designed for mocking, that lacks implementions. Because your test actually calls the method on the object, without using a mocking library to give it behavior, it's giving you that message.
如 Android 单元测试支持页面:
用于运行单元测试的 android.jar 文件不包含任何实际代码 - 由真实设备上的 Android 系统映像提供.相反,所有方法都会抛出异常(默认情况下).这是为了确保您的单元测试只测试您的代码,而不依赖于 Android 平台的任何特定行为(您没有明确模拟,例如使用 Mockito).如果这证明有问题,您可以将以下代码段添加到您的 build.gradle 以更改此行为:
"Method ... not mocked."
The android.jar file that is used to run unit tests does not contain any actual code - that is provided by the Android system image on real devices. Instead, all methods throw exceptions (by default). This is to make sure your unit tests only test your code and do not depend on any particular behaviour of the Android platform (that you have not explicitly mocked e.g. using Mockito). If that proves problematic, you can add the snippet below to your build.gradle to change this behavior:
android {
// ...
testOptions {
unitTests.returnDefaultValues = true
}
}
要解决这个问题,请使用 Mockito 之类的模拟框架,而不是调用 put 之类的真实方法,或者切换到 Robolectric 以使用 Java 等效类,否则只能在本机代码中实现.
To work around it, use a mocking framework like Mockito instead of calling real methods like put, or switch to Robolectric to use Java equivalents of classes otherwise implemented only in native code.
这篇关于ContentValues 的方法未被模拟的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:ContentValues 的方法未被模拟
基础教程推荐
- 多个组件的复杂布局 2022-01-01
- 验证是否调用了所有 getter 方法 2022-01-01
- 在 Java 中创建日期的正确方法是什么? 2022-01-01
- 如何在 Spring @Value 注解中正确指定默认值? 2022-01-01
- 如何在 JFrame 中覆盖 windowsClosing 事件 2022-01-01
- 不推荐使用 Api 注释的描述 2022-01-01
- Java Swing计时器未清除 2022-01-01
- 从 python 访问 JVM 2022-01-01
- 大摇大摆的枚举 2022-01-01
- Java 实例变量在两个语句中声明和初始化 2022-01-01
