Ash*_*win 2 android mockito sharedpreferences
我试图通过使用Mockito Library模拟Android共享偏好来编写单元测试,但是即使经过多次尝试它也不适用于我.请检查下面的示例代码,让我知道它出了什么问题
我目前正在使用"JCAndKSolutions/android-unit-test"android junit插件.
我的代码如下:
PreferenceHelper.java public class PreferencesHelper {private SharedPreferences mSharedPreferences;
public class PreferencesHelper
{
private SharedPreferences mSharedPreferences;
static String PREFERENCE_USER;
public PreferencesHelper(SharedPreferences mSharedPreferences)
{
this.mSharedPreferences = mSharedPreferences;
}
public void setUserName(String userName)
{
mSharedPreferences.edit().putString(PREFERENCE_USER, "Vkc").apply();
}
public String getUserName()
{
return mSharedPreferences.getString(PREFERENCE_USER, null);
}
}
Run Code Online (Sandbox Code Playgroud)
PreferenceHelperTest.java
public class PreferencesHelperTest extends TestCase
{
@Mock
SharedPreferences mSharedPreference;
@Mock
SharedPreferences.Editor mEditor;
@Mock
Context context;
@Mock
PreferenceManager mPreferenceManager;
PreferencesHelper mPrefHelper;
public void setUp() throws Exception
{
initMocks(this);
}
public void testSetUserName(){
final InOrder inOrder = inOrder(mEditor);
when(mSharedPreference.edit()).thenReturn(mEditor);
mPrefHelper = new PreferencesHelper(mSharedPreference);
mPrefHelper.setUserName("Grapes");
inOrder.verify(mEditor).putString(PreferencesHelper.PREFERENCE_USER, "Grapes");
inOrder.verify(mEditor).apply();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我运行此junit测试,我会收到以下错误
java.lang.NullPointerException
at com.example.aag.testhelloworld.PreferencesHelper.setUserName(PreferencesHelper.java:21)
at com.example.aag.testhelloworld.PreferencesHelperTest.testSetUserName(PreferencesHelperTest.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Run Code Online (Sandbox Code Playgroud)
在调试时我发现在调用putString()方法时抛出了nullPointer异常.
它出错的任何帮助或线索?
我相信问题是因为你在嘲笑它Editor,当你调用putString()它时会返回一个不同的对象.尝试模拟该putString()方法,如下所示:
when(mEditor.putString(anyString(), anyString())).thenReturn(mEditor);
| 归档时间: |
|
| 查看次数: |
5570 次 |
| 最近记录: |