如何在Android单元测试中按ID访问资源?

sak*_*sak 8 tdd android robolectric

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

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

InputStream jsonStream = context.getResources().openRawResource(R.raw.mock_json_response)
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,我收到以下错误:

android.content.res.Resources$NotFoundException: Unable to find resource ID #0x7f060001
Run Code Online (Sandbox Code Playgroud)

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

我已经尝试将JSON文件放在两者中/app/src/main/res,/app/src/test/res但似乎都不起作用.

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

Pet*_*huk 0

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

作为解决方法:

  1. 您可以模拟您的交互器/用例并使用您的 json 作为字符串。
  2. 您可以使用 Espresso 和 PowerMock 进行 UI 测试。

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

希望它会有所帮助。