SpringBoot集成MockServer
背景
最近项目中在引入Mock,其中有一项是屏蔽掉外部依赖,包括关联系统的REST接口。做了下技术调研,打算使用MockServer对外部接口进行mock
插件集成
在pom文件中增加mockserver的maven插件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29<plugin>
<groupId>org.mock-server</groupId>
<artifactId>mockserver-maven-plugin</artifactId>
<version>5.3.0</version>
<configuration>
<serverPort>1080</serverPort>
<!-- 可根据情况是否设置porxyPort。我没设置 -->
<proxyPort>1090</proxyPort>
<logLevel>DEBUG</logLevel>
<!-- 该类为初始化类,按照自己的文件配置,即下一步中的类 --> <initializationClass>org.mockserver.maven.ExampleInitializationClass</initializationClass>
</configuration>
<executions>
<execution>
<!-- 指定在该生命周期时调用该插件 -->
<id>process-test-classes</id>
<phase>process-test-classes</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>verify</id>
<phase>verify</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>创建自己的MockServerInitializer类(类名一定不要定义为
MockServerInitializer
,官方有这个类),实现ExpectationInitializer接口:1
2
3
4
5
6
7
8public class HttpMockServerInitializer implements ExpectationInitializer {
@Override
public void initializeExpectations(MockServerClient mockServerClient) {
mockServerClient.when(HttpRequest.request().withMethod("POST").withPath("/test"))
.respond(HttpResponse.response().withStatusCode(200).withBody("success"));
}
}PS:如果你在用idea编辑器,一定要打开idea的自动编译功能,默认该功能是不开启的。打开方式
运行mockserver服务:
1
mvn mockserver:run
然后就可以使用postman请求,得到预设的返回。
代码手动创建
插件集成比较方便,不过有些场景无法满足。比如需要在MockServer中注入Spring容器中的对象,当运行MockServer时,由于没有初始化Spring容器,导致注入失败。
这种情况就需要手动创建MockServer。
编辑pom.xml,导入依赖:
1
2
3
4
5
6<dependency>
<groupId>org.mock-server</groupId>
<artifactId>mockserver-netty</artifactId>
<!-- 成文时最新版本,可以到官网查询目前最新版本 -->
<version>5.3.0</version>
</dependency>创建mockServer,proxy可不设:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31//引入类
import static org.mockserver.integration.ClientAndProxy.startClientAndProxy;
import static org.mockserver.integration.ClientAndServer.startClientAndServer;
/**
* 使用@Service将该类注入spring,方便管理
* 实现InitializingBean接口,初始化类对象时,实例化mockServer对象
* 实现DisposableBean接口,销毁类对象时,关闭服务
*/
public class HttpMockServerManual implements InitializingBean, DisposableBean {
//创建对象
private ClientAndProxy proxy;
private ClientAndServer mockServer;
public void destroy() throws Exception {
//别忘了关闭服务
proxy.stop();
mockServer.stop();
}
public void afterPropertiesSet() throws Exception {
//实例化对象
mockServer = startClientAndServer(1080);
proxy = startClientAndProxy(1090);
}
}mock相关http接口:
1
2mockServer.when(HttpRequest.request().withMethod("POST").withPath("/test"))
.respond(HttpResponse.response().withStatusCode(200).withBody("success"));
更多详情参见官网
本文只提供了java实现。官网还有JS等实现,请戳MockServer官网了解。