JVM implementation of the consumer driven contract library pact.
From the Ruby Pact website:
Define a pact between service consumers and providers, enabling "consumer driven contract" testing.
Pact provides an RSpec DSL for service consumers to define the HTTP requests they will make to a service provider and the HTTP responses they expect back. These expectations are used in the consumers specs to provide a mock service provider. The interactions are recorded, and played back in the service provider specs to ensure the service provider actually does provide the response the consumer expects.
This allows testing of both sides of an integration point using fast unit tests.
This gem is inspired by the concept of "Consumer driven contracts". See http://martinfowler.com/articles/consumerDrivenContracts.html for more information.
Read Getting started with Pact for more information on how to get going.
- Twitter: @pact_up
- Gitter:
- Stack Overflow: https://stackoverflow.com/questions/tagged/pact
- For examples of using pact-jvm with spring boot, have a look at https://github.com/Mikuu/Pact-JVM-Example and https://github.com/mstine/microservices-pact
Additional documentation can be found at docs.pact.io, in the Pact Wiki, and in the Pact-JVM wiki. Stack Overflow is also a good source of help.
Pact-JVM is partially written in Scala. As Scala does not provide binary compatibility between major versions, most of the Pact-JVM artifacts have the version of Scala they were built with in the artifact name. So, for example, the pact-jvm-consumer-junit module has a Jar file named pact-jvm-consumer_2.12. The full name of the file is pact-jvm-consumer_2.12-3.5.x.jar.
Branch | Specification | Min JDK | Scala Versions | Latest Version |
---|---|---|---|---|
3.5.x | V3 | 8 | 2.12, 2.11 | 3.5.15 |
3.5.x-jre7 | V3 | 7 | 2.11 | 3.5.7-jre7.0 |
2.4.x (v2.x) | V2 | 6 | 2.10, 2.11 | 2.4.20 |
Pact-JVM has a number of ways you can write your service consumer tests.
You want to look at: scala-pact or pact-jvm-consumer-specs2
You want to look at: pact-jvm-consumer-junit for JUnit 4 tests and pact-jvm-consumer-junit5 for JUnit 5 tests. Also, if you are using Java 8, there is an updated DSL for consumer tests.
You want to look at: pact-jvm-consumer-groovy or pact-jvm-consumer-junit
Clojure can call out to Java, so have a look at pact-jvm-consumer-junit. For an example look at example_clojure_consumer_pact_test.clj.
You want to look at: Pact Consumer
As part of the V3 pact specification, we have defined a new pact file for interactions with message queues. For an implementation of a Groovy consumer test with a message pact, have a look at PactMessageBuilderSpec.groovy.
Once you have run your consumer tests, you will have generated some Pact files. You can then verify your service providers with these files.
You want to look at: scala-pact or pact sbt plugin
You want to look at: pact gradle plugin
You want to look at: pact maven plugin
For publishing pacts to a pact broker, have a look at https://github.com/warmuuh/pactbroker-maven-plugin
You want to look at: junit provider support
You want to look at: pact leiningen plugin
Have a look at writing specs to validate a provider
Have a look at Spring MVC Pact Test Runner
You want to look at: pact-jvm-provider
As part of the V3 pact specification, we have defined a new pact file for interactions with message queues. The Gradle pact plugin supports a mechanism where you can verify V3 message pacts, have a look at pact gradle plugin. The JUnit pact library also supports verification of V3 message pacts, have a look at pact-jvm-provider-junit.
The pact-jvm libraries are pure jvm technologies and do not have any native dependencies.
However if you have a ruby provider, the json produced by this library is compatible with the ruby pact library. You'll want to look at: Ruby Pact.
For .Net, there is Pact-net.
For JS, there is Pact-JS.
For Go, there is Pact-go.
Have a look at implementations in other languages.
There's a limit to how much we can help, however check out pact-jvm-server
You want to look at: Pact Broker
Which is a project that aims at providing tooling to coordinate pact generation and delivery between projects.