【问题标题】:Can't capture HTTP request with robolectric无法使用 robolectric 捕获 HTTP 请求
【发布时间】:2018-03-21 19:32:58
【问题描述】:

我正在尝试使用 Robolectric 捕获 http 请求 方法 tokenize 方法向服务器发送请求,我只想测试是否发送了帖子: 如果我尝试

//Cardtest.java

Robolectric.setDefaultHttpResponse(200, "dummy");
card.tokenize(paymentHandler);
Robolectric.getSentHttpRequest(0);

我有一个空数组错误

但我知道请求已发送,因为如果我删除第一行,则会出现以下错误:

Unexpected HTTP call POST

如果我输入日志语句,我的成功块似乎永远不会为 http 请求调用。

如何确保调用我的 HTTP 请求成功回调。

(我已经尝试过 Robolectric.runUiThreadTasksIncludingDelayedTasks();)

谢谢

【问题讨论】:

  • 以防万一你没有行Robolectric.getFakeHttpLayer().interceptHttpRequests(false)

标签: java android unit-testing testing robolectric


【解决方案1】:

3.0以上及更新版本 你可以使用

 FakeHttp.getFakeHttpLayer().interceptHttpRequests(false);

【讨论】:

    【解决方案2】:

    正如我们在 cmets 中讨论的那样。问题是因为 Robolectric 被配置为不拦截 http 请求:

    Robolectric.getFakeHttpLayer().interceptHttpRequests(false)
    

    【讨论】:

    • 我在 Robolectric 中找不到 getFakeHttpLayer()。你能告诉我它是在哪个版本中添加的吗?
    • 如果您使用 Robolectric 3.0,则需要包含额外的依赖项 mvnrepository.com/artifact/org.robolectric/shadows-httpclient/…。这仅适用于 apache http 客户端,因此如果您使用 UrlConnection,则它不起作用
    • 哦,我明白了,但不推荐使用 Apache http 客户端,它对于 android 有一些问题,这就是我不使用它的原因。
    • 确实如此。 Google 团队建议使用 Urlconnection 而不是 apache 客户端。至于现在大多数人使用 OkHttp。同样,大多数人将 http 包装到一些他们可以在单元测试中模拟的类
    猜你喜欢
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 2015-01-20
    • 1970-01-01
    • 2017-01-02
    • 2018-06-24
    相关资源
    最近更新 更多