- Notifications
You must be signed in to change notification settings - Fork483
JVM version of Pact. Enables consumer driven contract testing, providing a mock service and DSL for the consumer project, and interaction playback and verification for the service provider project.
License
pact-foundation/pact-jvm
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
JVM implementation of the consumer driven contract librarypact.
From theRuby 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 providerspecs 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". Seehttps://martinfowler.com/articles/consumerDrivenContracts.html for more information.
ReadGetting started with Pact for more information onhow to get going.
- Twitter:@pact_up
- Slack:Join the chat at https://slack.pact.io/
- Stack Overflow:https://stackoverflow.com/questions/tagged/pact
- For examples of using pact-jvm with spring boot, have a look athttps://github.com/Mikuu/Pact-JVM-Example andhttps://github.com/mstine/microservices-pact
Learn everything in Pact in 60 minutes:https://github.com/pact-foundation/pact-workshop-jvm-spring.
The workshop takes you through all of the key concepts of consumer and provider testing using a Spring boot application.
Additional documentation can be found atdocs.pact.io, in thePact Wiki,and in thePact-JVM wiki.Stack Overflow is also a good source of help, as is theSlack workspace.
Branch | Specification | JDK | Kotlin Version | Latest Version | Notes |
---|---|---|---|---|---|
4.7.x | V4 + plugins | 17+ (tested up to 23) | 2.0.21 | 4.7.0-beta.0 | |
4.6.x master | V4 + plugins | 17+ (tested up to 18) | 1.8.22 | 4.6.15 | |
4.5.x | V4 + plugins | 11+/17+(1) | 1.7.20 | 4.5.13 | |
4.1.x | V3 | 8-12 | 1.3.72 | 4.1.43 |
Notes:
- 1: Spring6 support library requires JDK 17+. The rest of Pact-JVM 4.5.x libs require 11+.
Branch | Specification | JDK | Kotlin Version | Scala Versions | Latest Version |
---|---|---|---|---|---|
4.4.x | V4 + plugins | 11+ | 1.6.21 | N/A | 4.4.9 |
4.3.x | V4 | 11+ | 1.6.21 | N/A | 4.3.19 |
4.2.x | V4 (1) | 11-15 (2) | 1.4.32 | N/A | 4.2.21 |
4.0.x | V3 | 8-12 | 1.3.71 | N/A | 4.0.10 |
3.6.x | V3 | 8 | 1.3.71 | 2.12 | 3.6.15 |
3.5.x | V3 | 8 | 1.1.4-2 | 2.12, 2.11 | 3.5.25 |
3.5.x-jre7 | V3 | 7 | 1.1.4-2 | 2.11 | 3.5.7-jre7.0 |
2.4.x | V2 | 6 | N/A | 2.10, 2.11 | 2.4.20 |
Notes:
- 1: V4 specification support is only partially implemented with 4.2.x
- 2: v4.2.x may run on JDK 16, but the build for it does not.
NOTE: The JARs produced by this project have changed with 4.1.x to better align with Java 9 JPMS. The artefacts are now:
au.com.dius.pact:consumerau.com.dius.pact.consumer:groovyau.com.dius.pact.consumer:junitau.com.dius.pact.consumer:junit5au.com.dius.pact.consumer:java8au.com.dius.pact.consumer:specs2_2.13au.com.dius.pact:pact-jvm-serverau.com.dius.pact:providerau.com.dius.pact.provider:scalatest_2.13au.com.dius.pact.provider:springau.com.dius.pact.provider:mavenau.com.dius.pact:providerau.com.dius.pact.provider:junitau.com.dius.pact.provider:junit5au.com.dius.pact.provider:scalasupport_2.13au.com.dius.pact.provider:leinau.com.dius.pact.provider:gradleau.com.dius.pact.provider:specs2_2.13au.com.dius.pact.provider:junit5springau.com.dius.pact.core:supportau.com.dius.pact.core:modelau.com.dius.pact.core:matchersau.com.dius.pact.core:pactbroker
Pact-JVM has a number of ways you can write your service consumer tests.
You want to look at:pact4s.
You want to look at:junit for JUnit 4 tests andjunit5 for JUnit 5 tests. Also, if you are using Java 11 or above, there isanupdated DSL for consumer tests.
NOTE: If you are using Java 8, there is no separate Java 8 support library anymore, see the above library.
You want to look at:groovy orjunit
Clojure can call out to Java, so have a look atjunit. For an examplelook atexample_clojure_consumer_pact_test.clj.
You want to look at:Consumer
As part of the V3 pact specification, we have defined a new pact file for interactions with message queues. For animplementation of a Groovy consumer test with a message pact, have a look atPactMessageBuilderSpec.groovy.
Once you have run your consumer tests, you will have generated some Pact files. You can then verify your service providerswith these files.
You want to look at:pact4s orscala-pact
You want to look at:pact gradle plugin
You want to look at:pact maven plugin
You want to look at:junit provider support for JUnit 4 tests andjunit5 for JUnit 5 tests
You want to look at:pact leiningen plugin
Have a look atspring orSpring MVC Pact Test Runner (Not maintained).
You want to look at:provider
As part of the V3 pact specification, we have defined a new pact file for interactions with message queues. The Gradlepact plugin supports a mechanism where you can verify V3 message pacts, have a look atpact gradle plugin.The JUnit pact library also supports verification of V3 message pacts, have a look atjunit.
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 isPact-net.
For JS, there isPact-JS.
For Go, there isPact-go.
For Rust, there isPact-Rust.
Have a look atimplementations in other languages.
There's a limit to how much we can help, however check outpact-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.
Documentation for contributors is here.
We are tracking anonymous analytics to gather important usage statistics like JVM versionand operating system. To disable tracking, set the 'pact_do_not_track' system property or environmentvariable to 'true'.
About
JVM version of Pact. Enables consumer driven contract testing, providing a mock service and DSL for the consumer project, and interaction playback and verification for the service provider project.