Вы здесь:

Для unit тестов хватает Mockito (ссылки в конце заметки).
Но, допустим, я хочу провести интеграционный тест своего сервиса, который взаимодействует через REST с другим сервисом.

Пример такой связки: frontend с Wicket обращается к backend. Нужно протестировать frontend с Wicket.
Может быть есть возможность запустить сторонний сервис (backend) с какими-то тестовыми данными. Можно написать простенький (или не очень) эмулятор этого другого сервиса. А можно использовать WireMock. Из ссылок в конце заметки должно быть все понятно. Далее просто описание примера.
1. Запуск wiremock (https://wiremock.org/docs/standalone/):

java -jar wiremock-standalone-3.12.1.jar
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
 /$$      /$$ /$$                     /$$      /$$                     /$$
| $$  /$ | $$|__/                    | $$$    /$$$                    | $$
| $$ /$$$| $$ /$$  /$$$$$$   /$$$$$$ | $$$$  /$$$$  /$$$$$$   /$$$$$$$| $$   /$$
| $$/$$ $$ $$| $$ /$$__  $$ /$$__  $$| $$ $$/$$ $$ /$$__  $$ /$$_____/| $$  /$$/
| $$$$_  $$$$| $$| $$  \__/| $$$$$$$$| $$  $$$| $$| $$  \ $$| $$      | $$$$$$/
| $$$/ \  $$$| $$| $$      | $$_____/| $$\  $ | $$| $$  | $$| $$      | $$_  $$
| $$/   \  $$| $$| $$      |  $$$$$$$| $$ \/  | $$|  $$$$$$/|  $$$$$$$| $$ \  $$
|__/     \__/|__/|__/       \_______/|__/     |__/ \______/  \_______/|__/  \__/

port:                         8080
enable-browser-proxying:      false
disable-banner:               false
no-request-journal:           false
verbose:                      false

wiremock-standalone-3.12.1.jar из https://wiremock.org/docs/standalone/
2. Настройка ответов wiremock (собственно сама настройка эмулятора):
через curl:
При HTTP GET запросе на http://localhost:8080/get/this ответить "Here it is!".

$ curl -X POST \
	--data '{ "request": { "url": "/get/this", "method": "GET" }, "response": { "status": 200, "body": "Here it is!\n" }}' \
	http://localhost:8080/__admin/mappings

Ответ:

{
"id" : "378e5f51-dce2-4b22-9c43-9a6453fceecc",
"request" : {
"url" : "/get/this",
"method" : "GET"
},
"response" : {
"status" : 200,
"body" : "Here it is!\n"
},
"uuid" : "378e5f51-dce2-4b22-9c43-9a6453fceecc"

Проверка с curl:

$ curl http://localhost:8080/get/this
Here it is!

В схеме интеграционного BDD тестирования "Given-When-Then" можно использовать в "Given".
Есть возможность настройки и проведения теста с помощью java кода (https://wiremock.org/docs/junit-jupiter/):

public class ProgrammaticWireMockTest {
	@RegisterExtension
	static WireMockExtension wm1 = WireMockExtension.newInstance()
		.options(wireMockConfig().dynamicPort().dynamicHttpsPort())
		.build();

	@RegisterExtension
	static WireMockExtension wm2 = WireMockExtension.newInstance()
		.options(wireMockConfig()
		.dynamicPort()
		.extensions(new ResponseTemplateTransformer(
				getTemplateEngine(),
				options.getResponseTemplatingGlobal(),
				getFiles(),
				templateModelProviders
			)
		)
	.build();

	@Test
	void test_something_with_wiremock() {
		// You can get ports, base URL etc. via WireMockRuntimeInfo
		WireMockRuntimeInfo wm1RuntimeInfo = wm1.getRuntimeInfo();
		int httpsPort = wm1RuntimeInfo.getHttpsPort();

		// or directly via the extension field
		int httpPort = wm1.port();

		// You can use the DSL directly from the extension field
		wm1.stubFor(get("/api-1-thing").willReturn(ok()));

		wm2.stubFor(get("/api-2-stuff").willReturn(ok()));
	}
}

Ссылки: