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)