java - MockwebServer 不模拟 http 调用

标签 java okhttp mockwebserver

我最近发现了 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/

关于java - MockwebServer 不模拟 http 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53432101/

相关文章:

java - BufferedWriter无法重新启动

java - 如果从 Tomcat 调用,Firefox headless 永远不会从截图中返回

java - dagger2如何注入(inject)不同作用域的同一类的对象?

java - 在 Android 中从 JSON 对象对 JSON 数组进行排序?

android - 使用 Retrofit 和 MockWebServer 模拟无网络

java - com.mysql.jdbc.PacketTooBigException : Packet for query is too large (8548 > 1024)

java - 可以使用任何 JWT token 调用 API

android - 如何为我们的服务器生成信号开源 android 应用程序的自签名证书

android - MockWebServer可以使用本地Json文件作为响应体吗?

android - 在 Android 上模拟服务器结果(Wiremock、MockWebServer 等)