pact-jvm

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.

Documentation

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

JDK

Scala Versions

Latest Version

3.6.x

V3

8

2.12

3.6.2

3.5.x

V3

8

2.12, 2.11

3.5.24

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 some other jvm language or test framework

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.

verify pacts with a Spring MVC project

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

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.