我有一个可以工作的 robolectric,想测试我的应用程序的一个组件,它执行 HTTP 请求。由于我不想将这些请求发送到我的实时服务器,而是发送到本地测试服务器,因此我想在测试期间覆盖字符串资源(包含服务器主机名)。

但是,我无法在 robolectric 文档中找到任何朝着我想要的方向远程运行的内容:(

最佳答案

我在 Robolectric 3 中遇到过类似的问题;您可以使用 Mockito 部分模拟在应用程序级别覆盖资源。

首先,您告诉 Robolectric 使用部分模拟的应用程序并在使用应用程序上下文时返回它:(感谢这个答案: https://stackoverflow.com/a/31386831/327648 )

RuntimeEnvironment.application = spy(RuntimeEnvironment.application);
when(RuntimeEnvironment.application.getApplicationContext())
    .thenReturn(RuntimeEnvironment.application);

然后你部分模拟 Resources 对象:
Resources spiedResources = spy(app.getResources());
when(app.getResources())
    .thenReturn(spiedResources);

然后你可以做真正的覆盖:
when(spiedResources.getString(R.string.server_address))
    .thenReturn("local server address");

我希望这有帮助。

关于robolectric - 使用 robolectric 更改某些资源字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19682102/

10-12 03:20