【发布时间】:2018-04-03 19:46:38
【问题描述】:
我是 Android 单元测试的新手,我想在现有项目中添加一些单元测试。我正在使用 MVP 设计架构。在我的演示者内部,我调用了PreferenceManager 以获取默认的SharedPrefences,但它总是返回null。我已经在 stackoverflow 上关注了一些关于如何模拟 PreferenceManager 和 SharedPreferences 的教程和建议,但我无法让它工作。这是我的演讲者课程
@RunWith(MockitoJUnitRunner.class)
public class SettingsPresenterTest {
@Mock
private SettingsView mView;
@Mock
private LocalConfiguration conf;
private SettingsPresenter mPresenter;
public SettingsPresenterTest() {
super();
}
@Before
public void startUp() throws Exception {
MockitoAnnotations.initMocks(LocalConfiguration.class);
MockitoAnnotations.initMocks(PreferenceManager.class);
mPresenter = new SettingsPresenter(mView);
final SharedPreferences sharedPrefs =
Mockito.mock(SharedPreferences.class);
final Context context = Mockito.mock(Context.class);
Mockito.when(PreferenceManager.getDefaultSharedPreferences(context)).
thenReturn(sharedPrefs);
}
@Test
public void notificationsEnabledClicked() throws Exception {
boolean notifsEnabled = false;
mPresenter.notificationsEnabledClicked(notifsEnabled);
Mockito.verify(mView).setNotificationsView(notifsEnabled);
}
}
这是SharedPreferences返回null的方法
public class LocalConfiguration {
public TerritoryDto getLastSavedTerritory() {
SharedPreferences preferences =
PreferenceManager.getDefaultSharedPreferences(H.getContext());
String terrritoryString = preferences.getString(SAVED_TERRITORY,
null);
return
SerializerHelper.getInstance().deserialize(terrritoryString,
TerritoryDto.class);
}
}
你能给我一些关于如何解决这个错误的指导吗?
【问题讨论】:
标签: android unit-testing junit mockito tdd