Android mokito When(), thenReturn() 不工作
Android mokito When(), thenReturn() is not working
我正在使用 Android Mockito 框架编写测试代码。我在要测试的 class 中编写了模拟 SharedPreference 的代码。为此,使用 When() thenReturn() 对 SharedPreference 进行了存根。调试的结果,不断返回null,应用程序死掉,抛出NullPointerException。这是我的代码:
测试代码 :
@RunWith(MockitoJUnitRunner.class)
public class ExampleUnitTest {
@Mock
public Context context;
@Mock
public SharedPreferences sharedPref;
@Mock
public SharedPreferences.Editor editor;
TestA mTestA;
String tempStringData = "";
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(context.getSharedPreferences(anyString(), anyInt())).thenReturn(sharedPref);
when(sharedPref.edit()).thenReturn(editor);
when(sharedPref.getString(anyString(), anyString())).thenReturn(tempStringData);
mTestA = new TestA(context);
}
}
TestA.class :
public class TestA {
SharedPreference mSharedPref;
public TestA(Context context) {
mSharedPref = context.getSharedPreferences(context.getString(R.string.shrf_file_key), Context.MODE_PRIVATE);
// return 'null'
}
}
我想我做的存根是正确的,但为什么它一直返回 null?
你的测试class方法看起来有点奇怪。
您正在 TestA
构造函数
中使用以下方法调用
mSharedPref = context.getSharedPreferences(context.getString(R.string.shrf_file_key), Context.MODE_PRIVATE);
因此您应该模拟以下方法调用
context.getSharedPreferences(...)
context.getString(...)
像这样
when(context.getString(eq(R.string.shrf_file_key)).thenReturn(tempStringData);
when(context.getSharedPreferences(eq(tempStringData), eqInt(Context.MODE_PRIVATE)).thenReturn(sharedPref);
anyString()
不允许 null
个对象。
context.getString(R.string.shrf_file_key)
returns 空。
如果你也想允许空值,你可以使用nullable(String.class)
我正在使用 Android Mockito 框架编写测试代码。我在要测试的 class 中编写了模拟 SharedPreference 的代码。为此,使用 When() thenReturn() 对 SharedPreference 进行了存根。调试的结果,不断返回null,应用程序死掉,抛出NullPointerException。这是我的代码:
测试代码 :
@RunWith(MockitoJUnitRunner.class)
public class ExampleUnitTest {
@Mock
public Context context;
@Mock
public SharedPreferences sharedPref;
@Mock
public SharedPreferences.Editor editor;
TestA mTestA;
String tempStringData = "";
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(context.getSharedPreferences(anyString(), anyInt())).thenReturn(sharedPref);
when(sharedPref.edit()).thenReturn(editor);
when(sharedPref.getString(anyString(), anyString())).thenReturn(tempStringData);
mTestA = new TestA(context);
}
}
TestA.class :
public class TestA {
SharedPreference mSharedPref;
public TestA(Context context) {
mSharedPref = context.getSharedPreferences(context.getString(R.string.shrf_file_key), Context.MODE_PRIVATE);
// return 'null'
}
}
我想我做的存根是正确的,但为什么它一直返回 null?
你的测试class方法看起来有点奇怪。
您正在 TestA
构造函数
mSharedPref = context.getSharedPreferences(context.getString(R.string.shrf_file_key), Context.MODE_PRIVATE);
因此您应该模拟以下方法调用
context.getSharedPreferences(...)
context.getString(...)
像这样
when(context.getString(eq(R.string.shrf_file_key)).thenReturn(tempStringData);
when(context.getSharedPreferences(eq(tempStringData), eqInt(Context.MODE_PRIVATE)).thenReturn(sharedPref);
anyString()
不允许 null
个对象。
context.getString(R.string.shrf_file_key)
returns 空。
如果你也想允许空值,你可以使用nullable(String.class)