gpt4 book ai didi

java - 使用 Mockito 对 SharedPreferences 包装器进行单元测试

转载 作者:行者123 更新时间:2023-12-02 11:40:03 28 4
gpt4 key购买 nike

我有一个围绕 Android 中的 SharedPreferences 的实用程序包装器。我想对这个包装器进行单元测试,所以我 mock 我没有测试的部分:

@Before
public void setup() {
context = Mockito.mock(Context.class);
prefs = Mockito.mock(SharedPreferences.class);
editor = Mockito.mock(SharedPreferences.Editor.class);

when(context.getSharedPreferences(anyString(), anyInt())).thenReturn(prefs);
when(prefs.edit()).thenReturn(editor);
when(editor.commit()).thenReturn(true);
}

但是,我的测试在获得 Editor 的行处遇到了 NPE:

SharedPreferences.Editor editor = prefs.edit();

为了让这个模拟工作,我缺少什么?我已经看到许多其他建议使用各种工具的答案,但如果可能的话,我强烈希望避免使用这些工具进行一组简单的测试。如果我确实需要使用其他工具,我应该注意什么以及该工具如何解决该问题?

最佳答案

事实证明,问题只是缺少模拟。我忘记分享创建 prefs 的行,它依赖于 context.getString()。该错误将我指向上面显示的行,但事实证明上面的行具有实际的 NPE。一个简单的模拟 .getString() 返回测试字符串有效:

@Before
public void setup() {
context = Mockito.mock(Context.class);
prefs = Mockito.mock(SharedPreferences.class);
editor = Mockito.mock(SharedPreferences.Editor.class);

when(content.getString(anyInt())).thenReturn("test-string");
when(context.getSharedPreferences(anyString(), anyInt())).thenReturn(prefs);
when(prefs.edit()).thenReturn(editor);
when(editor.commit()).thenReturn(true);
}

解决方案:检查模拟对象上使用的每个方法是否也被正确模拟!

关于java - 使用 Mockito 对 SharedPreferences 包装器进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48652816/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com