Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MockwebServer不';模拟http调用_Java_Okhttp3_Mockwebserver - Fatal编程技术网

Java MockwebServer不';模拟http调用

Java MockwebServer不';模拟http调用,java,okhttp3,mockwebserver,Java,Okhttp3,Mockwebserver,我最近发现了MockWebServer库,并尝试在Junit和mockito项目中使用它 我有这个测试方法: @Test public void testGetUsers() throws Exception { MockWebServer server = new MockWebServer(); server.start(); MockResponse mockedResponse = new

我最近发现了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'
启动单元测试时,Mockwebserver不会模拟http调用。我从真实服务器得到响应,而不是模拟响应(“{}”)

你能帮我吗?
提前谢谢

我猜它并没有像你期望的那样工作。在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
提供了一个新地址:

我猜这一行是有问题的一行:
MyConf.getOkHttpClient().newCall(request.execute()
getUsers()
方法中,OP并没有注入服务器,所以代码是在构建一个真正的服务器,而不是使用已传入的模拟?没错,Thomas。他必须使用server.url的返回值来确定应该调用哪个服务器。谢谢您的回答。我现在更明白了。但是,是否有一种方法可以使用该baseURL而不必在参数中将其提供给getUsers()。我无法更改getUsers()的签名!您可以添加一个包含带有baseURL的公共和静态字符串的配置类,然后在测试中覆盖它。