junit mock服务器文件,JUnit单元测试4—模拟Web服务器

单元测试中很常见的需求是一个模拟的测试桩,例如数据库链接,HTTP服务等。业界已经有丰富的工具创建这样的测试桩。

本文以模拟一个Web服务器为例,介绍打桩测试。

软件准备

我们使用了开源的io.fabric8.mockwebserver组件,该组件是基于okhttp3及okhttp3中的mockwebserver实现的。

我们以Maven构建Java程序为例,只需要在pom.xml中添加依赖:

io.fabric8

mockwebserver

0.1.2

test

示例程序:

演示在运行单元测试时启动一个模拟的Web服务器,并支持返回指定内容。

实际使用时,可以根据mock server中接收的request进行判断,处理更复杂的服务端逻辑。

import static org.junit.Assert.*;

import java.io.IOException;

import org.junit.AfterClass;

import org.junit.BeforeClass;

import org.junit.Test;

import okhttp3.OkHttpClient;

import okhttp3.Request;

import okhttp3.Response;

import okhttp3.mockwebserver.Dispatcher;

import okhttp3.mockwebserver.MockResponse;

import okhttp3.mockwebserver.MockWebServer;

import okhttp3.mockwebserver.RecordedRequest;

public class MockServerTest {

private static MockWebServer server;

@BeforeClass

public static void initMockServer() throws IOException {

server = new MockWebServer();

final Dispatcher dispatcher = new Dispatcher() {

@Override

public MockResponse dispatch(RecordedRequest request) throws InterruptedException {

return new MockResponse().setResponseCode(200).setBody("{\"id\":4234, \"domain\":\"itcore\"}");

}

};

server.setDispatcher(dispatcher);

server.start(32800);

}

@Test

public void testGet() throws IOException {

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder().url(server.url("")).build();

Response response = client.newCall(request).execute();

String body = response.body().string();

assertTrue(body.contains("4234"));

}

@AfterClass

public static void closeMockWebServer() throws IOException {

server.close();

}

}

使用mvn test命令执行测试:

-------------------------------------------------------

T E S T S

-------------------------------------------------------

Running MockServerTest

MockWebServer[32800] starting to accept connections

MockWebServer[32800] received request: GET / HTTP/1.1 and responded: HTTP/1.1 200 OK

{"id":4234, "domain":"itcore"}

MockWebServer[32800] done accepting connections: socket closed

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.797 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

支持HTTPS

如果需要让模拟的Web服务器对外提供HTTPS协议的服务,只需调用useHttps方法并添加相关引用即可。

server.useHttps(MockSSLContextFactory.create().getSocketFactory(), false);

注意:

如果在上述示例的MockServerTest测试类中调用useHttps协议,单元测试不会通过。

因为测试方法中发送消息的OkHttpClient工具类并没有设置信任服务端HTTPS证书。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值