我正在尝试编写一个使用模拟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文件模拟网络响应。

    希望能对您有所帮助。

    10-07 19:21
    查看更多