Draft:WireMock

(aka API mocking, and hence the name). It is used for Integration Testing of various application interfaces, especially REST API..

Features
WireMock can run in many Unit testing and Integration testing frameworks, including JUnit, TestNG, Testcontainers, Spock and others. It can be also deployed as a standalone service in Docker , Kubernetes or as a Java executable.

Key features include:


 * Stubbing and Mocking. WireMock supports HTTP response stubbing, allowing the definition of expected request-response pairs known as "stubs." These stubs simulate the behavior of external services.
 * Request Verification. It offers capabilities for verifying incoming HTTP requests by specifying matching criteria such as HTTP method, URL, headers, and request body.
 * Proxy and Intercept. WireMock enables proxying and interception of HTTP requests, facilitating the analysis of request and response traffic.
 * Record and Playback. It supports the recording of actual HTTP interactions and their subsequent playback, facilitating the creation of stubs based on real-world data.
 * Stateful behavior simulation. It can simulate various response sequences as scenarios or define complex dynamic behavior as a finite state machine.

WireMock uses a custom configuration format, but the definitions can be imported from other formats like OpenAPI.

History
WireMock was created in 2011 by Tom Akehurst when working for ioko. The project was released to the public on the 9th of October 2011 under the Apache License v2. It quickly gained traction in the Java community and got adopted in many projects. It was referenced by many sites, including an introduction guide on Baeldung.

In 2016, WireMock 2.0 was released. Approximately at the same time, Docker images were introduced to the project by Rodolphe Chaigneau. Support for Android was also introduced and demonstrated by Sam Edwards.

In 2019, a first book on WireMock for Java developers was published by Dilip Sundarraj. The same year, Andrew Morgan published a full WireMock 2 course on Pluralsight

In 2022, a new WireMock Inc. company was formed around WireMock, with Tom Akehurst becoming its CTO and Uri Maoz as the CEO. The company builds WireMock Cloud - a SaaS solution and a developer portal for API development productivity platform. In May 2023 WireMock Inc. received a seed investment round and re-emphasized its commitment to the open source ecosystem and growing the community . In June 2023, WireMock Inc became a member of the OpenAPI Initiative.

In June 2023, a formal governance model was introduced in the project as part of the effort to grow the contributor community and the ecosystem. A public roadmap was published for the project . Tom Akehurst became the BDFL of the project, a charter of co-maintainers was introduced.

In September 2023, WireMock 3 was released. This release includes many new request filters and other features, drop Java 1.8 support, and reduce the dependencies footprint by using new Java capabilities. There are additional initiatives in preview, including support for gRPC and GraphQL mocking, Testcontainers modules, etc.

In October 2023, WireMock Inc and AtomicJar announced partnership focusing on the Testcontainers ecosystem and announced inclusion if the module into the official program. The WireMock module for Testcontainers includes support for Java, Golang, Python and Node.js. This month, WireMock has also officially participated in Hacktoberfest. The first ever in-person hack days was organized by WireMock in collaboration with the London Java Community and MLH .

In December 2023, the WireMock 3 general availability availability was announced. The 4x GitHub contributors growth in 2023 was announced by one of the maintainers

Ecosystem
WireMock has a diverse ecosystem of extensions, adapters and integrations for different technologies. These allow WireMock to be used with different programming languages and technologies, especially within the Java Virtual Machine ecosystem.

Popular integrations include:
 * Spring Boot.
 * Spring Cloud Contract
 * Testcontainers modules
 * Kotest - test framework for Kotlin programming language
 * Quarkus extension
 * Robot Framework library for Python projects (GitHub Repo)

Other Implementations
WireMock has many 3rd-party implementations for different technology stacks. These implementations are maintained outside the WireMock community governance. They may or may not be fully compatible with WireMock’s official implementation in Java.

Popular server implementations:
 * WireMock.NET - for the .NET ecosystem
 * WireMock.RS - Server implementation in Rust offering a similar functionality together with a standalone stubr project
 * WireMock Cloud - private source SaaS service by WireMock Inc.

There are many other implementations using WireMock Docker and providing wrappers for it, for example Python Golang or JavaScript. There is ongoing effort to consolidate these implementations with help of Testcontainers.

In addition to the extensions, there is a demonstrated use of WireMock with popular development tools and frameworks, for example Micronaut or Quarkus

Education Use
Beyond its practical applications, WireMock serves as an educational tool, providing developers and testers with insights into API testing, mocking, and the emulation of HTTP interactions.