【发布时间】:2013-09-16 00:59:37
【问题描述】:
我在我的 Android JUnit 测试中使用 MockWebServer 库。我正在测试一个调用服务器的 SDK。所以我使用 MockWebServer 覆盖这些服务器 URL 并捕获 SDK 发送的内容以对其进行断言。
我遇到的问题是,如果我尝试执行 server.takeRequest() 并将其分配给新的 RecordedRequest 变量,则测试会在第二个 server.takeRequest() 上挂起,有时甚至在第一个上-- 如果我在模拟器上运行它,它会挂在第一个 server.takeRequest() 方法上,但如果我在我的物理 Android 设备上运行它,它会冻结在第二个 server.takeRequest() 方法上。
public void testSomething() {
final MockWebServer server = new MockWebServer();
try {
server.play();
server.enqueue(new MockResponse().setBody("")
.setResponseCode(HttpURLConnection.HTTP_INTERNAL_ERROR));
server.enqueue(new MockResponse().setBody("")
.setResponseCode(HttpURLConnection.HTTP_OK));
server.enqueue(new MockResponse().setBody("")
.setResponseCode(HttpURLConnection.HTTP_OK));
URL url = server.getUrl("/");
// This internal method overrides some of the hardcoded URLs
// within the SDK that I'm testing.
Util.overrideUrls(url.toString())
// Do some server calls via the SDK utilizing the mock server url.
RecordedRequest requestFor500 = server.takeRequest();
// Do some assertions with 'requestFor500'
// Do some more server calls via the SDK utilizing the mock server url.
/*
* This is the part where the JUnit test hangs or seems to go into
* an infinite loop and never recovers
*/
RecordedRequest requestAfter500Before200 = server.takeRequest();
} catch {
...
}
}
我做错了什么还是MockWebServer 的某种错误?
【问题讨论】:
-
+1 我今天注意到了这一点 - 可惜没有答案!我只是在 MWS 2.0.0 中使用示例...
-
我也可以通过 MWS2 注意到这一点。顺便说一句,如果您在响应中设置一个标头,它似乎可以正常工作。
-
看到这个也有200或302以外的任何响应代码。添加了'mockwebserver'标签,也许这会引起广场人的注意......
标签: java android junit mocking mockwebserver