android - Android单元测试中如何通过ID访问资源?

标签 android tdd robolectric

我正在尝试编写一个使用模拟 JSON 响应的单元测试。

基本上,我的 Intent 是将 json 文件添加到/res/raw,并使用与应用程序中相同的方法访问它们:

InputStream jsonStream = context.getResources().openRawResource(R.raw.mock_json_response)

但是当我这样做时,我收到以下错误:
android.content.res.Resources$NotFoundException: Unable to find resource ID #0x7f060001

我正在使用 robolectric 进行测试——我不确定这是否会改变必须访问外部文件的方式。

我尝试将 JSON 文件放入 /app/src/main/res/app/src/test/res但似乎都不起作用。

是否可以通过这种方式访问​​测试中的资源?

最佳答案

不,您不能在单元测试期间使用资源 ID。
单元测试意味着它们将在没有真实设备和与真实资源的任何关系的情况下运行(在单元测试期间,您无权访问上下文,因此您无权访问资源)。

作为一种解决方法:

  • 您可以模拟您的交互器/用例并将您的 json 用作字符串。
  • 您可以将 UI 测试与 Espresso 和 PowerMock 一起使用。

  • PowerMock 允许您使用 json 文件模拟 Web 响应。

    希望它会有所帮助。

    关于android - Android单元测试中如何通过ID访问资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30103845/

    相关文章:

    java - 安卓 Activity : Access methods of a model

    android - android:使用Google Analytics(分析)后非零退出值2

    c# - 我应该使用回调还是引入公共(public)字段来帮助进行单元测试?

    gradle - 在Robolectric中使用多个res文件夹

    android - 数据库测试失败 Robolectric 2.4 + Ubuntu 14 + GradleWrapper 2.4

    android - 如何创建 ActionBar 的 Action Overflow 部分?

    android - 弃用的 Plus.PeopleApi.load

    unit-testing - 您是在编写功能代码之前还是之后编写单元测试?

    c# - TDD - 提取接口(interface)或使方法虚拟化

    android - Robolectric + JMockIt 设置