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.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
config feat: enable support for provider state values in the JUnit 5 tests Jul 15, 2018
gradle/wrapper chore: upgrade Gradle to 4.9 Aug 12, 2018
pact-jvm-consumer-groovy Merge branch 'v3.5.x' Sep 9, 2018
pact-jvm-consumer-java8 fix: only enable wildcard matching logic with an explicit system prop… Sep 9, 2018
pact-jvm-consumer-junit fix: only enable wildcard matching logic with an explicit system prop… Sep 9, 2018
pact-jvm-consumer-junit5 Merge branch 'v3.5.x' Sep 9, 2018
pact-jvm-consumer-specs2 fix: handle the case where the query parameters are a string in a V3 … Sep 8, 2018
pact-jvm-consumer Merge branch 'v3.5.x' Sep 9, 2018
pact-jvm-matchers fix: only enable wildcard matching logic with an explicit system prop… Sep 9, 2018
pact-jvm-model Merge branch 'v3.5.x' Sep 9, 2018
pact-jvm-pact-broker Merge branch 'v3.5.x' Aug 12, 2018
pact-jvm-provider-gradle refactor: Converted ResponseComparison to Kotlin Sep 10, 2018
pact-jvm-provider-junit refactor: use the interface to the verifier instead of the concrete c… Sep 9, 2018
pact-jvm-provider-junit5 refactor: use the interface to the verifier instead of the concrete c… Sep 9, 2018
pact-jvm-provider-lein Merge branch 'v3.5.x' Sep 9, 2018
pact-jvm-provider-maven refactor: converted some verifier methods to Kotlin Sep 10, 2018
pact-jvm-provider-sbt Update all the readmes #695 Jun 17, 2018
pact-jvm-provider-scalasupport Excluded some transitive dependencies to aid people using Maven #182 Dec 7, 2017
pact-jvm-provider-scalatest Moved Mock*ProviderConfig classes to pact-jvm-consumer Mar 7, 2018
pact-jvm-provider-specs2 Moved Mock*ProviderConfig classes to pact-jvm-consumer Mar 7, 2018
pact-jvm-provider-spring refactor: use the interface to the verifier instead of the concrete c… Sep 9, 2018
pact-jvm-provider refactor: converted some verifier methods to Kotlin Sep 10, 2018
pact-jvm-server Merge pull request #666 from groboclown/server-enhancement Apr 18, 2018
pact-jvm-support feat: ProviderStateGenerator now takes expressions Jul 15, 2018
pact-specification-test fix: handle the case where the query parameters are a string in a V3 … Sep 8, 2018
.gitignore refactor: added missing test hidden by gitignore Jul 15, 2018
.travis.yml Revert "Added Java 9 to travis build" Apr 20, 2018
CHANGELOG.md update changelog for release 3.5.22 Sep 9, 2018
LICENSE Initial commit Jan 8, 2014
README.md doc: update version in readme Aug 12, 2018
appveyor.yml invoke gradle build in appveyor May 28, 2016
build.gradle fix: downgrade kotlinter as it was failing the build Aug 26, 2018
gradle.properties chore: Upgrade Kotlin to the latest version Aug 26, 2018
gradlew Upgrade Gradle to 4.8 Jul 1, 2018
gradlew.bat Upgrade gradle to 3.4.1 Apr 14, 2017
releasePrep.groovy Correct the release script Sep 27, 2017
settings.gradle Merge branch 'v3.5.x' Aug 12, 2018

README.md

pact-jvm

Build Status Appveyor build status Maven Central

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.

Contact

Links

Documentation

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.

Note about artifact names and versions

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.

Supported JDK and specification versions:

Branch Specification Min JDK Scala Versions Latest Version
3.5.x V3 8 2.12, 2.11 3.5.21
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

Service Consumers

Pact-JVM has a number of ways you can write your service consumer tests.

I Use Scala

You want to look at: scala-pact or pact-jvm-consumer-specs2

I Use Java

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.

I Use Groovy or Grails

You want to look at: pact-jvm-consumer-groovy or pact-jvm-consumer-junit

(Use Clojure I)

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.

I Use some other jvm language or test framework

You want to look at: Pact Consumer

My Consumer interacts with a Message Queue

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.

Service Providers

Once you have run your consumer tests, you will have generated some Pact files. You can then verify your service providers with these files.

I am writing a provider and want to ...

verify pacts with SBT

You want to look at: scala-pact or pact sbt plugin

verify pacts with Gradle

You want to look at: pact gradle plugin

verify pacts with Maven [version 2.1.9+]

You want to look at: pact maven plugin

verify pacts with JUnit tests [version 2.3.3+, 3.1.3+]

You want to look at: junit provider support for JUnit 4 tests and pact-jvm-provider-junit5 for JUnit 5 tests

verify pacts with Leiningen [version 2.2.14+, 3.0.3+]

You want to look at: pact leiningen plugin

verify pacts with Specs2

Have a look at writing specs to validate a provider

verify pacts with a Spring MVC project

Have a look at Spring MVC Pact Test Runner

I want to verify pacts but don't want to use sbt or gradle or leiningen

You want to look at: pact-jvm-provider

verify interactions with a message queue

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.

I Use Ruby or Go or something else

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.

I Use something completely different

There's a limit to how much we can help, however check out pact-jvm-server

How do I transport my pacts from consumers to providers?

You want to look at: Pact Broker

Which is a project that aims at providing tooling to coordinate pact generation and delivery between projects.

I want to contribute

Documentation for contributors is on the wiki.