WireMock is a flexible library for stubbing and mocking web services. Unlike general purpose mocking tools it works by creating an actual HTTP server that your code under test can connect to as it would a real web service.
It supports HTTP response stubbing, request verification, proxy/intercept, record/playback of stubs and fault injection, and can be used from within a unit test or deployed into a test environment.
Although it’s written in Java, there’s also a JSON API so you can use it with pretty much any language out there.
Some scenarios you might want to consider WireMock for:
Mocking HTTP client classes in a way that adequately reflects their real behaviour is pretty hard. Creating real HTTP exchanges alleviates this by allowing you to use your production HTTP client implementation in your tests.
Object based mocking isn’t really suitable for acceptance/functional testing scenarios. WireMock can be run as a standalone service or deployed into a servlet container to enable it to be installed into your dev/test environments.
Here are some alternative JVM based libraries with similar goals:
Shouts to the following folks who’ve been kind enough to submit improvements: