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.
- Twitter: @pact_up
- Google users group: https://groups.google.com/forum/#!forum/pact-support
- For an example of using pact-jvm with spring boot, have a look at https://github.com/mstine/microservices-pact
Additional documentation can be found in the Pact Wiki, and in the Pact-JVM wiki.
Pact-JVM is written in Scala. As Scala does not provide binary compatibility between major versions, all 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.10. The full name of the file is pact-jvm-consumer_2.10-2.0.x.jar.
We currently cross-compile all the artifacts against 2.10 and 2.11 versions of Scala, except for the SBT modules.
Pact-JVM has a number of ways you can write your service consumer tests.
You want to look at: pact-jvm-consumer-specs2
You want to look at: pact-jvm-consumer-junit
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 ExampleClojureConsumerPactTest.clj.
You want to look at: Pact Consumer
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: pact sbt plugin
You want to look at: pact gradle plugin
You want to look at: pact maven plugin
Have a look at Spring MVC Pact Test Runner
You want to look at: pact-jvm-provider
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: pact
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.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
Most of Pact-JVM is written in Scala and is built with Gradle.
$ ./gradlew clean build
You can publish pact-jvm to your local maven repo using:
$ ./gradlew clean install
To publish to a nexus repo:
$ ./gradlew clean check uploadArchives
You will have to change the nexus URL and username/password in build.gradle and you must be added to the nexus project to be able to do this
The SBT project files still remain for those who want to build it with SBT. Note, however, that this is unmaintained as there is no custodian for the SBT build.
Scala requires a lot of permgen space to compile. If you're using Java 6 or 7, use the following java and sbt options:
export JAVA_OPTS='-Xmx2048m -XX:MaxPermSize=1024m -XX:PermSize=1024m'
export SBT_OPTS='-Xmx2048m -XX:MaxPermSize=1024m -XX:PermSize=1024m'
To build the libraries:
$ sbt clean test install
You can publish pacts to your local maven repo using:
$ sbt clean test publishLocal
To publish to a nexus repo, change the url in project/Build.scala then run:
$ sbt clean test publish