A lightweight rewrite of the abandoned MockServer project with focus on simplicity, maintainability and Testcontainers.
Note
The full list of changes can be found in the changelog.
You may also have a look at the comparison with other frameworks.
Besides a few differences the usage is mostly identical to the original project.
try(MockServerContainer container = new MockServerContainer())
{
container.start();
try(MockServerClient client = new MockServerClient(
container.getHost(),
container.getServerPort()))
{
String expectedResponse = "Test";
// Setup expectation
client.when(request("/test").withMethod("GET"))
.respond(response().withBody(expectedResponse));
HttpClient httpClient = HttpClient.newHttpClient();
// Execute request
HttpResponse<String> resp = httpClient.send(
HttpRequest.newBuilder()
.uri(URI.create(container.getEndpoint() + "/test"))
.GET()
.build(),
HttpResponse.BodyHandlers.ofString());
assertEquals(expectedResponse, resp.body());
}
}
Example using forwarding/recording
try(MockServerContainer container = new MockServerContainer())
{
container.start();
try(MockServerClient client = new MockServerClient(
container.getHost(),
container.getServerPort()))
{
// Setup forwarding
client.when(request("/"))
.forward(HttpForward.forward().withHost("my-nginx.local"));
HttpClient httpClient = HttpClient.newHttpClient();
// Execute request
HttpResponse<String> resp = httpClient.send(
HttpRequest.newBuilder()
.uri(URI.create(container.getEndpoint() + "/"))
.GET()
.build(),
HttpResponse.BodyHandlers.ofString());
assertTrue(resp.body().contains("Welcome to nginx!"));
// You can also retrieve requests, expectations and responses
String recorded =
client.retrieveRecordedRequestsAndResponses(request("/"), Format.JSON);
// or generate the code for writing them
String codeToGenerateExpectation =
client.retrieveRecordedExpectations(request("/"), Format.JAVA);
}
}
The returned codeToGenerateExpectation
will look like this:
new MockServerClient("localhost", 1080)
.when(
request()
.withMethod("GET")
.withPath("/")
...,
Times.once(),
TimeToLive.unlimited(),
0
)
.respond(
response()
.withStatusCode(200)
.withReasonPhrase("OK")
.withHeaders(...)
.withBody("<!DOCTYPE html>\n<html>\n<head>\n<title>Welcome to nginx!</title>...")
);
Required dependencies in pom.xml
<dependency>
<groupId>software.xdev.mockserver</groupId>
<artifactId>client</artifactId>
<version>...</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>software.xdev.mockserver</groupId>
<artifactId>testcontainers</artifactId>
<version>...</version>
<scope>test</scope>
</dependency>
MockServer also works really well together with a network failure simulation tools such as ToxiProxy.
Installation guide for the latest release
Module | Distribution via |
---|---|
client | |
server |
|
testcontainers |
If you need support as soon as possible and you can't wait for any pull request, feel free to use our support.
See the contributing guide for detailed instructions on how to get started with our project.
View the license of the current project or the docs that contain a dependency summary (per module)