go mockweb接口_用mockwebserver来测试HTTP客户端

快速开始

首先定义pom文件,添加如下依赖:

io.github.openfeign

feign-core

11.0

com.squareup.okhttp3

mockwebserver

4.6.0

test

junit

junit

4.11

test

org.assertj

assertj-core

3.14.0

test

com.google.code.gson

gson

2.5

接着就是编写单元测试,代码如下:

public class FeignTest {

@Rule

public final ExpectedException thrown = ExpectedException.none();

@Rule

public final MockWebServer server = new MockWebServer();

@Test

public void queryMap() throws Exception {

server.enqueue(new MockResponse().setBody("foo"));

TestInterface api = Feign.builder().target(TestInterface.class, "http://localhost:" + server.getPort());

api.queryMap(Maps.newHashMap("1", "apple"));

RecordedRequest request = server.takeRequest();

assertEquals(request.getPath(), "/?1=apple");

}

interface TestInterface {

@RequestLine("GET /")

void queryMap(@QueryMap Map queryMap);

}

}

上面的RecordedRequest还有很多方法来获得一个请求的各个部分,比如Headers、Body等等。

更多的功能

模拟长时间响应

@Rule

final MockWebServer server = new MockWebServer();

server.enqueue(new MockResponse().setBody("foo").setBodyDelay(3, TimeUnit.SECONDS));

上面代码表示MockWebServer会在3秒后才返回响应体。

模拟连接失败

@Rule

final MockWebServer server = new MockWebServer();

server .enqueue(new MockResponse().setSocketPolicy(SocketPolicy.DISCONNECT_AT_START));

上面代码表示,连接成功后server端立马断开连接。

模拟302跳转

@Rule

final MockWebServer server1 = new MockWebServer();

@Rule

final MockWebServer server2 = new MockWebServer();

String expectedLocation = server2.url("").url().toString();

server1.enqueue(new MockResponse().setResponseCode(302).setHeader("Location", expectedLocation));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值