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

时间:2015-05-07 14:20:05

标签: android tdd robolectric

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

基本上,我的意图是将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中,但似乎都不起作用。

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

1 个答案:

答案 0 :(得分:0)

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

解决方法:

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

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

希望会有所帮助。