This was not totally logical to me so I’ll write the solution down here for myself and anyone else that might have the same problem as me 🙂
The solution is to use the WireMock.verify function to setup a payload assertion.
Example (pseudo code):
import com.github.tomakehurst.wiremock.client.WireMock; import com.niklasottosson.myApplication; import org.junit.jupiter.api.Test; import static com.github.tomakehurst.wiremock.client.WireMock.equalToXml; import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; public class MyApplicationIntegrationTest { @Test public void happyCaseTest() { String expected = "Hello Test"; String myPath = "/mymockservice" // 1. Setup WireMock WireMock.stubFor(post(urlEqualTo(myPath)) .willReturn( aResponse() .withStatus(200) .withHeader("Content-Type", "text/xml") .withBody("Hello from mock service"))); // 2. Run system under test myApplication.start(); // 3. Verify payload sent to mock service WireMock.verify( postRequestedFor(urlEqualTo(myPath)) .withRequestBody(equalToXml(expected)) ); } }
1. Setup a WireMock stub for receiving calls from myApplication on a specific path
2. Start system under test, myApplication in this case
3. Verify that a call has been made to the path AND with a request payload matching our “expected” result. If this validates the payload is as “expected” 🙂
So in conclusion, WireMock is doing the assertion here, not our testing framework
Tested with WireMock v.3.1.0