java - Android 单元测试未为 Mockito stub 方法提供模拟消息

标签 java android unit-testing mockito

我创建了以下测试方法,我模拟了 Settings.Secure 并 stub 该类的 getString 方法。

@Test
public void testIsDevicePostOwner() throws Exception {
    String mockDeviceId = "2c3977ad-0867-49d6-aad8-c2762f373551";

    Post mockedPost = mock(Post.class);

    Settings.Secure mockedSecure = mock(Settings.Secure.class);

    ContentResolver mockContentResolver = mock(ContentResolver.class);

    when(mockedSecure.getString(mockContentResolver, Settings.Secure.ANDROID_ID)).thenReturn(mockDeviceId);
}

当我运行测试时,出现以下错误:

java.lang.RuntimeException: Method getString in android.provider.Settings$Secure not mocked.

有没有人有什么想法?

最佳答案

如果你想模拟一个静态方法,使用PowerMock

您需要使用 PowerMockRunner 运行并准备类以进行测试:

@PrepareForTest({Settings.Secure.class})

为了模拟你需要的对象:

PowerMockito.mockStatic(Settings.Secure.class);

那你可以试试:

when(Settings.Secure.getString(mockContentResolver, Settings.Secure.ANDROID_ID)).thenReturn(mockDeviceId);

最后,你可以测试:

verifyStatic();

关于java - Android 单元测试未为 Mockito stub 方法提供模拟消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29868207/

相关文章:

java - 如何将 MS Access 数据库连接到 Java Applet

java - 将组件放置在 JTabbedPane 中选项卡的右侧

java - Spring MVC 数据绑定(bind) - 原始类型

java - Android Studio Activity 未启动

android - 如何使用android actionbar改变contentsView

javascript - 使用 Selenium 测试 jQuery 元素数据()?

json - NancyFX : How do I deserialize dynamic types via BrowserResponse. Body.DeserializeJson(单元测试)

java - LibGdx - 平铺游戏碰撞检测

java - 如何将 Multiple 数组转换为 Json 数组并将 Json 添加到 hashmap

java - 使用 Mockito 测试增强的 Java 行为