Pio*_*ski 4 java android mockito
我正在和Mockito一起创建一个测试.在测试中,我正在创建一个类型的对象ContentValues.当我运行此测试时,我收到错误:
java.lang.RuntimeException: Method put in android.content.ContentValues not mocked.
Run Code Online (Sandbox Code Playgroud)
这是最小的代码:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
怎么做才能避免这个错误?
Jef*_*ica 13
您正在使用专为模拟而设计的库,缺少实现.因为您的测试实际上是在对象上调用方法,而不使用模拟库来为其提供行为,所以它会为您提供该消息.
"方法......不要嘲笑."
用于运行单元测试的android.jar文件不包含任何实际代码 - 由真实设备上的Android系统映像提供.相反,所有方法都抛出异常(默认情况下).这是为了确保您的单元测试仅测试您的代码,而不依赖于Android平台的任何特定行为(您没有明确嘲笑,例如使用Mockito).如果这证明有问题,您可以将下面的代码段添加到build.gradle中以更改此行为:
Run Code Online (Sandbox Code Playgroud)android { // ... testOptions { unitTests.returnDefaultValues = true } }
要解决它,使用像Mockito这样的模拟框架,而不是像实际方法一样调用实际方法put,或者切换到Robolectric使用Java等价的类,否则只能在本机代码中实现.
| 归档时间: |
|
| 查看次数: |
4393 次 |
| 最近记录: |