Arquillian Algeron Extension 1.0.0.Alpha1 Released
Since we wrote this post we didn't laze around. Check our latest announcement.
The Arquillian team is proud to announce the 1.0.0.Alpha1 release of the Arquillian Algeron Extension component!
Important note: This extension was called Arquillian Pact before version 1.0.0.Alpha5
, so you should use this name when pulling dependencies from Maven Central.
This is the first release of Arquillian Pact. This extension provides an integration between Arquillian and Pact.
Pact is a framework that provides support for Consumer Driven Contracts testing. You can read more about Consumer Driven Contracts in this interesting blog post or in our upcoming book Testing Java Microservices.
Full documentation of the project can be found at http://arquillian.org/arquillian-algeron/
Consumer
First thing to do is to develop the Consumer part of the test. Consumer part of Consumer-Driven Contract defines requirements from the consumer of the API which are then used to develop the client interaction with the API as well as to validate provider implementation.
Dependencies
<dependencies>
<dependency>
<groupId>org.arquillian.pact</groupId>
<artifactId>arquillian-pact-consumer-core</artifactId>
<version>${version.arquillian_pact}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>au.com.dius</groupId>
<artifactId>pact-jvm-consumer_2.11</artifactId>
<scope>test</scope>
<version>3.5.0-beta.1</version>
</dependency>
</dependencies>
Test
@RunWith(Arquillian.class) public class ClientGatewayTest {
@Deployment public static JavaArchive createDeployment() { return ShrinkWrap.create(JavaArchive.class).addClasses(ClientGateway.class); }
@Pact(provider="test_provider", consumer="test_consumer") public PactFragment createFragment(PactDslWithProvider builder) {
Map<String, String> header = new HashMap<>(); header.put("Content-Type", "application/json");
return builder .given("test state") .uponReceiving("ConsumerTest test interaction") .path("/") .method("GET") .willRespondWith() .status(200) .headers(header) .body("{\"responsetest\": true, \"name\": \"harry\"}") .toFragment(); (4) }
@EJB ClientGateway clientGateway;
@Test @PactVerification("test_provider") public void should_return_message() throws IOException { assertThat(clientGateway.getMessage(), is("{\"responsetest\": true, \"name\": \"harry\"}")); } }
You can see more examples in the GitHub repository.
Provider
The next thing you need to do is share the contract (aka “pact” file) with Provider project and validate that provider produces the expected responses to defined requests. This is done by replaying all requests defined in contract against real provider and validating that the response is the expected one.
We currently support following locations of the contracts:
- an arbitrary URL
- Pact Broker – repository of the contracts
- local directory
Dependencies
<dependency>
<groupId>org.arquillian.pact</groupId>
<artifactId>arquillian-pact-provider-core</artifactId>
<scope>test</scope>
<version>${version.arquillian_pact}</version>
</dependency>
<dependency>
<groupId>au.com.dius</groupId>
<artifactId>pact-jvm-provider_2.11</artifactId>
<scope>test</scope>
<version>3.5.0-beta.1</version>
</dependency>
Test
@RunWith(Arquillian.class) @Provider("test_provider") @PactFolder("pacts") public class MyServiceProviderTest {
@Deployment(testable = false) public static WebArchive createDeployment() { return ShrinkWrap.create(WebArchive.class).addClass(MyService.class); }
@CurrentConsumer Consumer consumer;
@CurrentInteraction RequestResponseInteraction interaction;
@ArquillianResource URL webapp;
@ArquillianResource Target target;
@Test public void should_provide_valid_answers() { target.testInteraction(webapp, consumer.getName(), interaction); }
}
You can see full example in our GitHub repository.
What is Arquillian?
Arquillian is open source software that empowers you to test JVM-based applications more effectively. Created to defend the software galaxy from bugs, Arquillian brings your test to the runtime so you can focus on testing your application's behavior rather than managing the runtime. Using Arquillian, you can develop a comprehensive suite of tests from the convenience of your IDE and run them in any IDE, build tool or continuous integration environment.
Release details
Component | Arquillian Algeron Extension |
---|---|
Version | 1.0.0.Alpha1 view tag |
Release date | 2016-09-21 |
Released by | Alex Soto |
Compiled against |
Published artifacts org.arquillian.pact
- org.arquillian.pact » arquillian-pact-consumer-api jar javadoc pom
- org.arquillian.pact » arquillian-pact-consumer-core jar javadoc pom
- org.arquillian.pact » arquillian-pact-consumer-spi jar javadoc pom
- org.arquillian.pact » arquillian-pact-provider-api jar javadoc pom
- org.arquillian.pact » arquillian-pact-provider-core jar javadoc pom
- org.arquillian.pact » arquillian-pact-provider-spi jar javadoc pom
- org.arquillian.pact » arquillian-pact-provider-pact-broker-loader jar javadoc pom
Thanks to the following list of contributors: Alex Soto