Android 上的 Mockito,Context.getString(id) 和 NullPointerException

2024-01-08

我刚刚开始学习 Mockito 测试框架,我遵循了官方教程:开发者.android.com https://developer.android.com/training/testing/unit-testing/local-unit-tests.html

代码是:

private static final String FAKE_STRING = "HELLO WORLD";

@Mock
Context mMockContext;

@Test
public void readStringFromContext_LocalizedString() {
    // Given a mocked Context injected into the object under test...
    when(mMockContext.getString(R.string.hello_world))
            .thenReturn(FAKE_STRING);
    ClassUnderTest myObjectUnderTest = new ClassUnderTest(mMockContext);

    // ...when the string is returned from the object under test...
    String result = myObjectUnderTest.getHelloWorldString();

    // ...then the result should be the expected one.
    assertThat(result, is(FAKE_STRING));
}

我写了以下 ClassUnderTest:

public class ClassUnderTest {

private Context context;

public ClassUnderTest(Context context)
{
    this.context=context;
}

public String getHelloWorldString()
{
    return context.getString(R.string.hello_world);
}

}

运行后我得到 NullPointerException:

    java.lang.NullPointerException
at android.content.Context.getHelloWorldString(Context.java:293)
at com.darekk.draggablelistview.unit_tests.MockitoTest.readStringFromContext_LocalizedString(MockitoTest.java:46)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1619)

当我用我自己的类替换 android Context 时,它就可以工作了。

平台:IntelliJ IDEA 社区版 15.0.6

我真的很感谢任何帮助。


此代码应该是您测试的第一行:

doReturn("Sample Hello world string")
            .when(mMockContext)
            .getString(any(Integer.class));

需要对方法进行存根

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 上的 Mockito,Context.getString(id) 和 NullPointerException 的相关文章

  • 带 html 表格的 TextView

    我有个问题 我想放入 TextView html 格式文本 我添加如下
  • Gson 解析 JSON 时出现 RuntimeException:无法调用没有参数的受保护的 java.lang.ClassLoader()

    我继承了一些代码 使用 Gson 将应用程序状态保存为 JSON 然后使用fromJson http google gson googlecode com svn trunk gson docs javadocs com google gs
  • 在Graphview android的LineGraphSeries中的两个系列之间填充颜色

    I have created a line graph using GraphView demo But I need to fill the areas only between the lines with a specific col
  • 如何在 Android 上启用 OpenGL 扩展 GL_EXT_shader_framebuffer_fetch?

    我正在使用 OpenGL ES 2 0 开发一个 Android 应用程序 我想使用GL EXT shader framebuffer fetch https www khronos org registry gles extensions
  • Android Beacon Library - 正确使用BluetoothMedic?

    根据以下观察 我对蓝牙医疗的使用有一些疑问 由于蓝牙在我的一台设备上停止 我一直在查看 BluetoothMedic 看看它是否能提供帮助 我查看了调试消息和源代码 根据我是否使用enablePeriodicTests 或单独运行runSc
  • Android Studio 3.2.1 升级后构建错误

    我正在从 Udacity 构建一个示例项目 到目前为止 一切正常 但升级到 Android Studio 3 2 1 后 我遇到了下面的构建错误 摇篮版本 4 6 项目链接 https github com udacity ud851 Su
  • 相机预览越来越长

    我写了一个用于显示相机的代码 以下是我的布局文件的代码
  • 对 Java Servlet 进行单元测试

    我想知道对 servlet 进行单元测试的最佳方法是什么 只要内部方法不引用 servlet 上下文 测试内部方法就不是问题 但是测试 doGet doPost 方法以及引用上下文或使用会话参数的内部方法呢 有没有办法简单地使用经典工具 例
  • 在原生 Android 应用程序中使用 WebView 整个布局有用吗?

    我目前正在开发一个原生 Android 应用程序 我的应用程序有很多活动 我要发展native安卓应用程序 但在某些情况下 我想使用webview整个布局只是一个网络视图 不是线性的或相对的或其他布局 只是一个网络视图 所有图像和其他内容都
  • 安装后隐藏 Android 应用程序图标

    我看到谷歌应用程序中有一些GPS应用程序 安装后 该应用程序将没有图标显示 但会在后台运行服务 我将如何实现这一目标 要从启动器中删除应用程序 请不要将这些行与主要活动放在AndroidManifest xml
  • 如何获取与 TextView 关联的字符串资源的 id?

    我可以访问 TextView 实例 获取它的资源 ID 并通过以下方式获取它的资源名称getResources getResourceEntryName 但我似乎找不到一种方法来获取与其关联的字符串的 id 如何动态获取与 TextView
  • 当键盘出现时滚动布局

    当键盘出现并隐藏工具栏 FrameLayout 时 我的屏幕大小调整到顶部 我只需将聊天项目滚动到顶部并将框架布局保持在顶部 我尝试了谷歌和SO的一些例子 但对我没有任何帮助
  • Android ViewPager - 在左侧和右侧显示页面预览

    我用的是安卓系统ViewPager 我想要做的是在左侧和右侧显示页面的预览 我已经知道在哪里可以使用否定pageMargin显示右侧的预览 setPageMargin 100 无论如何 我也可以显示左侧的预览吗 它基本上类似于我正在寻找的画
  • 如何在静音模式下启用媒体声音

    即使在静音模式下如何启动声音 我的音频文件位于我的原始文件夹中 我已经编写了一些代码 但是当我进入 Android 的声音设置时 铃声和闹钟是唯一更改为最大值的设置 但媒体部分没有更改 这是我的代码 public void playSoun
  • 在选择项目之前设置微调器的文本

    我有一个包含三个项目的微调器 我使用 XML 字符串数组资源来为其提供数据 当您打开活动时 微调器通常会显示数组列表中的第一项 我想更改它并在选择项目之前在微调器中显示文本 选择一个 我怎样才能做到这一点 您可以通过以下两种方式之一进行操作
  • 在 Android 模拟器中更改屏幕亮度

    Android模拟器可以测试屏幕亮度变化吗 我尝试过各种示例 它们都使用以下代码片段 WindowManager LayoutParams lp window getAttributes lp screenBrightness some f
  • 从应用程序打开无线设置

    我想直接从我的应用程序打开 设置 gt 无线和网络 我怎样才能做到这一点 尝试这个 startActivity new Intent android provider Settings ACTION WIRELESS SETTINGS 或者
  • 如何在Android AsyncTask中显示Toast?

    我正在尝试在我的initial background类中显示Toast 扩展为AsyncTask
  • 如何在 EditText 中用逗号分隔数字

    我有一个 EditText 其 inputType 为number 当用户打字时 我想用逗号分隔数字 这是一个小例子 123 将表示为 123 1234 将表示为 1 234 12345 将表示为 12 345 等等 我尝试使用 TextW
  • 如何避免从模拟对象列表返回模拟

    我正在尝试模拟 责任驱动的设计 在对象需要服务来检索其他对象的情况下 我似乎无法避免从模拟返回模拟 一个例子是检查上个月的账单是否已支付的对象 它需要一个检索账单列表的服务 所以我需要在测试中模拟 billRetrievalService

随机推荐

  • 如何使用 Tomcat 在其 URL 中隐藏应用程序上下文?

    我有许多应用程序在 Tomcat 中运行 每个人都有自己的背景 我使用 Apache HTTP Server 将它们全部连接到不同的域名 并且mod jk 请参阅此问题的更多详细信息 如何使用 mod jk 挂载上下文引用的 Tomcat
  • Typescript:获取未定义的值

    我好像有一个问题无法解决 我希望 dialogTitle 变量也与标题变量一起显示 startHour 和 startMinute 变量 然而 我似乎在标题后得到了标题和 未定义 两次 我应该怎么办 事件表单 component ts im
  • 在 MVC 5 的操作过滤器中调用异步方法

    我正在编写一个动作过滤器 继承自ActionFilterAttribute 它使用HttpClient将数据 POST 到外部服务器OnResultExecuted方法 HttpClient有方法PostAsync返回一个可等待的Task
  • Xamarin Forms CollectionView:无法为 SelectedItem 提供透明背景

    我正在使用 CollectionView 当用户选择一个项目时 我根本不希望 SelectedItem 显示背景颜色 我尝试按照 Xamarin 文档中的说明 通过使用 VisualStateManager 将 BackgroundColo
  • 如何用react-native绘制梯形/梯形?

    这是 id 处的 css 代码 效果很好 border bottom 100px solid 0000ff80 border right 50px solid transparent height 0 width 100px div div
  • Python - 属性错误“_io.TextIOWrapper”对象没有属性“open”

    我收到错误 File open classname txt a AttributeError io TextIOWrapper object has no attribute open 尝试打开文件时 我需要打开文件并将分数写入文件 这是代
  • R 中的数据操作:“X”必须是原子的

    我使用以下命令导入了一个在多列中包含标题和数字的文件 irs data lt read csv file 10incyallnoagi csv 我想将 1 列中的值除以另一列中的值 然后确定最高的 3 个值 salary var lt c
  • Google Orgchart 创造婚姻

    嗨 我正在使用Google Orgchart https developers google com chart interactive docs gallery orgchart hl da Example创建一个家谱 我将三个家庭组合在
  • 如何使用 PHP api 从 Dropbox 删除文件

    首先 我可以使用 PHP api 正确地从 Dropbox 上传和下载文件 这是我上传文件的方式 Upload files file fopen default png rb size filesize default png client
  • Rails - 使用布局对所有电子邮件使用相同的附件

    我可能遗漏了一些明显的东西 但我有一个徽标 我想将其包含在从我的应用程序发送的所有电子邮件中 我有一个用于所有这些邮件的主布局 我认为有一种方法可以使其保持干燥 而不必在每个邮件程序方法中添加代码行来附加文件 有人可以指出我正确的方向或纠正
  • 为什么在删除所有侦听器后我的 Node.js 进程没有终止?

    在下面的代码中 我为data的事件process stdin与once method console log Press Enter to allow process to terminate process stdin once data
  • 找不到 C/C++ IntelliJ IDEA 插件

    我正在尝试添加一个到IntelliJ IDEA 所以我去插件并搜索它但找不到它 他们是否删除了它并用新的 IDE cLion 替换了它 是不再支持还是什么 看起来您的 IntelliJ IDEA 版本比 C C 插件支持的版本新 如果你看一
  • 在每句之前打印项目符号 + 每句之后换行 SQL

    我有这样的文字 第一句 第二句 第三句 我希望它是 句子一 第二句 第三句 我想我可以替换 with char 10 char 13 但是我该如何处理子弹呢 如果手动打印 字符效果很好 我只是不知道如何为每个句子添加项目符号 包括第一个句子
  • Wicket 与 GWT - 需要建议

    我正在开发一个基于 Java EE 的 Web 应用程序 我们的时间非常有限 无法提出 alpha 版本并尝试决定要使用的 Web 框架 它必须是易于学习但功能强大的东西 由于开发需要时间 标准 JSP Servlet 在这里不是一个选择
  • 相当于 RecyclerView 中的 ListView.setEmptyView

    In RecyclerView 我想设置一个空视图 当适配器为空时显示 是否有相当于ListView setEmptyView http developer android com reference android widget Adap
  • javadoc -Xdoclint 不断标记我的(可选)匿名类,因为它显然没有注释

    我正在使用 javadoc 来记录我的公共枚举 我正在使用以下命令编译以下所有示例 javac Xdoclint all LetsLearnJavadocXdoclint java 如果我的枚举是这样的 它会生成一个 class 文件 而不
  • 抑制“对‘所有人’无能为力”

    我正在编写一个简短的 shell 脚本 它调用 make all 这并不重要 但如果是这种情况 我有没有办法可以抑制 对所有人无能为力 的消息 我希望找到一个 make 标志来抑制这种情况 不确定是否有 但是额外的一两行代码也可以工作 仅供
  • 如何将用户重定向到不同的服务器并包含 HTTP 基本身份验证凭据?

    我有一个 Web 应用程序 C ASP net 需要使用 HTTP 基本身份验证将用户传递到远程 Apache 服务器上的页面 我需要能够将用户名和密码传递到该服务器 以允许通过我的应用程序进行身份验证的用户无缝使用其他应用程序 而不会提示
  • 无法对反应中的对象数组进行排序

    我试图在按下按钮时按字母顺序对数组进行排序 但到目前为止我尝试的所有操作都失败了 当我尝试控制台记录某些内容并在控制台中打印时 按钮和功能起作用 我觉得我的排序功能是错误的 但我不知道该怎么办 我该如何修复这个问题才能正常工作 import
  • Android 上的 Mockito,Context.getString(id) 和 NullPointerException

    我刚刚开始学习 Mockito 测试框架 我遵循了官方教程 开发者 android com https developer android com training testing unit testing local unit tests