MockwebServer 不模拟 http 调用
MockwebServer doesn't mock http call
我最近发现了 MockWebServer 库,并尝试在我的项目中使用它与 Junit 和 mockito。
我有这个测试方法:
@Test
public void testGetUsers() throws Exception {
MockWebServer server = new MockWebServer();
server.start();
MockResponse mockedResponse = new MockResponse();
mockedResponse.setResponseCode(200);
mockedResponse.setBody("{}");
server.enqueue(mockedResponse);
server.url("https://my-domain/user/api/users");
JSONObject result = UserService.getUsers();
assertNotNull(result);
server.shutdown();
}
我的方法 getUsers() 执行 Http 调用:
public JSONObject getUsers() {
String urlUser = "https://my-domain/user/api/users";
Request request = new Request.Builder()
.url(urlUser)
.build();
Response response =
MyConf.getOkHttpClient().newCall(request).execute();
.... //process users and return a json Object
}
这是我的 gradle 配置:
compile('com.squareup.okhttp3:okhttp:3.4.2')
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.1.0'
testImplementation 'com.squareup.okhttp3:mockwebserver:3.12.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.1.0'
testCompile 'org.junit.jupiter:junit-jupiter-params:5.1.0'
testCompile group: 'org.mockito', name: 'mockito-all', version: '1.8.4'
testCompile group: 'com.squareup.okhttp3', name: 'mockwebserver', version: '3.12.0'
当我启动单元测试时,http 调用没有被 Mockwebserver 模拟。我从真实服务器收到响应,而不是模拟响应(“{}”)。
你能帮我吗?
提前致谢
我的猜测是它没有像您预期的那样工作。在 git 自述文件中,他们给出了以下代码示例:
// Ask the server for its URL. You'll need this to make HTTP requests.
HttpUrl baseUrl = server.url("/v1/chat/");
所以您将通过必须调用的模拟服务器获得 URL,而不是覆盖任何现有的 URL。
我只是用下面的源代码仔细检查了一下:
MockWebServer server = new MockWebServer();
server.start();
HttpUrl baseUrl = server.url("/v1/chat/");
这为 baseUrl
提供了一个新地址:http://127.0.0.1:8125/v1/chat/
我最近发现了 MockWebServer 库,并尝试在我的项目中使用它与 Junit 和 mockito。
我有这个测试方法:
@Test
public void testGetUsers() throws Exception {
MockWebServer server = new MockWebServer();
server.start();
MockResponse mockedResponse = new MockResponse();
mockedResponse.setResponseCode(200);
mockedResponse.setBody("{}");
server.enqueue(mockedResponse);
server.url("https://my-domain/user/api/users");
JSONObject result = UserService.getUsers();
assertNotNull(result);
server.shutdown();
}
我的方法 getUsers() 执行 Http 调用:
public JSONObject getUsers() {
String urlUser = "https://my-domain/user/api/users";
Request request = new Request.Builder()
.url(urlUser)
.build();
Response response =
MyConf.getOkHttpClient().newCall(request).execute();
.... //process users and return a json Object
}
这是我的 gradle 配置:
compile('com.squareup.okhttp3:okhttp:3.4.2')
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.1.0'
testImplementation 'com.squareup.okhttp3:mockwebserver:3.12.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.1.0'
testCompile 'org.junit.jupiter:junit-jupiter-params:5.1.0'
testCompile group: 'org.mockito', name: 'mockito-all', version: '1.8.4'
testCompile group: 'com.squareup.okhttp3', name: 'mockwebserver', version: '3.12.0'
当我启动单元测试时,http 调用没有被 Mockwebserver 模拟。我从真实服务器收到响应,而不是模拟响应(“{}”)。
你能帮我吗? 提前致谢
我的猜测是它没有像您预期的那样工作。在 git 自述文件中,他们给出了以下代码示例:
// Ask the server for its URL. You'll need this to make HTTP requests.
HttpUrl baseUrl = server.url("/v1/chat/");
所以您将通过必须调用的模拟服务器获得 URL,而不是覆盖任何现有的 URL。
我只是用下面的源代码仔细检查了一下:
MockWebServer server = new MockWebServer();
server.start();
HttpUrl baseUrl = server.url("/v1/chat/");
这为 baseUrl
提供了一个新地址:http://127.0.0.1:8125/v1/chat/