diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/config/AccurestConfigProperties.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/config/AccurestConfigProperties.groovy index ae160a69d4..253887ae7b 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/config/AccurestConfigProperties.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/config/AccurestConfigProperties.groovy @@ -7,7 +7,7 @@ class AccurestConfigProperties { /** * For which unit test library tests should be generated */ - TestFramework targetFramework = TestFramework.SPOCK + TestFramework targetFramework = TestFramework.JUNIT /** * Which mechanism should be used to invoke REST calls during tests diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/GeneratorScannerSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/GeneratorScannerSpec.groovy index e95eeb1fe9..77e2804805 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/GeneratorScannerSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/GeneratorScannerSpec.groovy @@ -1,6 +1,7 @@ package io.codearte.accurest import io.codearte.accurest.config.AccurestConfigProperties +import io.codearte.accurest.config.TestFramework import spock.lang.Specification class GeneratorScannerSpec extends Specification { @@ -21,7 +22,7 @@ class GeneratorScannerSpec extends Specification { def "should create class with full package"() { given: - AccurestConfigProperties properties = new AccurestConfigProperties() + AccurestConfigProperties properties = new AccurestConfigProperties(targetFramework: TestFramework.SPOCK) properties.contractsDslDir = new File(this.getClass().getResource("/directory/with/stubs/package").toURI()) TestGenerator testGenerator = new TestGenerator(properties, classGenerator, Stub(FileSaver)) when: diff --git a/accurest-gradle-plugin/src/test/resources/functionalTest/bootSimple/build.gradle b/accurest-gradle-plugin/src/test/resources/functionalTest/bootSimple/build.gradle index a2463e423e..4db3e39f58 100644 --- a/accurest-gradle-plugin/src/test/resources/functionalTest/bootSimple/build.gradle +++ b/accurest-gradle-plugin/src/test/resources/functionalTest/bootSimple/build.gradle @@ -54,6 +54,7 @@ accurest { contractsDslDir = contractsDir // generatedTestSourcesDir = file("${project.rootDir}/src/test/groovy/") stubsOutputDir = wireMockStubsOutputDir + targetFramework = 'Spock' } //TODO: Put it into the plugin diff --git a/accurest-gradle-plugin/src/test/resources/functionalTest/messagingProject/build.gradle b/accurest-gradle-plugin/src/test/resources/functionalTest/messagingProject/build.gradle index d658a7c0d8..f48bbe9c4f 100644 --- a/accurest-gradle-plugin/src/test/resources/functionalTest/messagingProject/build.gradle +++ b/accurest-gradle-plugin/src/test/resources/functionalTest/messagingProject/build.gradle @@ -18,6 +18,7 @@ ext { stubsOutputDirRoot = file("${project.buildDir}/production/${project.name}-stubs/") wireMockStubsOutputDir = new File(stubsOutputDirRoot, 'repository/mappings/') contractsOutputDir = new File(stubsOutputDirRoot, 'repository/accurest/') + targetFramework = 'Spock' } configurations { diff --git a/accurest-gradle-plugin/src/test/resources/functionalTest/scenarioProject/build.gradle b/accurest-gradle-plugin/src/test/resources/functionalTest/scenarioProject/build.gradle index d111afa126..e5b1dfb4db 100644 --- a/accurest-gradle-plugin/src/test/resources/functionalTest/scenarioProject/build.gradle +++ b/accurest-gradle-plugin/src/test/resources/functionalTest/scenarioProject/build.gradle @@ -45,7 +45,9 @@ configure([project(':fraudDetectionService'), project(':loanApplicationService') } accurest { + // tag::target_framework[] targetFramework = 'Spock' + // end::target_framework[] testMode = 'MockMvc' baseClassForTests = 'com.blogspot.toomuchcoding.MvcSpec' contractsDslDir = file("${project.projectDir.absolutePath}/mappings/") diff --git a/docs/src/docs/asciidoc/index.adoc b/docs/src/docs/asciidoc/index.adoc index 42f57e8f79..75828b5440 100644 --- a/docs/src/docs/asciidoc/index.adoc +++ b/docs/src/docs/asciidoc/index.adoc @@ -11,7 +11,7 @@ Just to make long story short - AccuREST is a tool that enables Consumer Driven AccuREST moves TDD to the level of software architecture. -= Why? +== Why? The main purposes of AccuREST are: @@ -22,15 +22,13 @@ The main purposes of AccuREST are: = 2. Using in your project -== Prerequisites +== 2.1. Gradle Project -= 2.1. Gradle Project - -== Prerequisites +=== Prerequisites In order to use Accurest with Wiremock you have to use gradle or maven plugin. -== Add gradle plugin +==== Add gradle plugin [source,groovy,indent=0] ---- @@ -53,7 +51,7 @@ dependencies { } ---- -== Add maven plugin +==== Add maven plugin [source,xml,indent=0] ---- @@ -75,7 +73,7 @@ dependencies { Read more: https://github.com/Codearte/accurest-maven-plugin[accurest-maven-plugin] -== Add stubs +==== Add stubs By default Accurest is looking for stubs in src/test/resources/stubs directory. Directory containing stub definitions is treated as a class name, and each stub definition is treated as a single test. @@ -89,11 +87,11 @@ Accurest will create test class `defaultBasePackage.MyService` with two methods - shouldCreateUser() - shouldReturnUser() -== Run plugin +=== Run plugin Plugin registers itself to be invoked before `compileTestGroovy` task. You have nothing to do as long as you want it to be part of your build process. If you just want to generate tests please invoke `generateAccurest` task. -== Configure plugin +=== Configure plugin To change default configuration just add `accurest` snippet to your Gradle config @@ -106,7 +104,7 @@ accurest { } ---- -=== Configuration options +==== Configuration options - **testMode** - defines mode for acceptance tests. By default MockMvc which is based on Spring's MockMvc. It can also be changed to **JaxRsClient** or to **Explicit** for real HTTP calls. - **imports** - array with imports that should be included in generated tests (for example ['org.myorg.Matchers']). By default empty array [] @@ -120,7 +118,7 @@ accurest { - **stubsOutputDir** - dir where the generated Wiremock stubs from Groovy DSL should be placed - **targetFramework** - the target test framework to be used; currently Spock and JUnit are supported with Spock being the default framework -== Base class for tests +==== Base class for tests When using Accurest in default MockMvc you need to create a base specification for all generated acceptance tests. In this class you need to point to endpoint which should be verified. @@ -141,12 +139,12 @@ class MvcSpec extends Specification { In case of using `Explicit` mode, you can use base class to initialize the whole tested app similarly as in regular integration tests. In case of `JAXRSCLIENT` mode this base class should also contain `protected WebTarget webTarget` field, right now the only option to test JAX-RS API is to start a web server. -== Invoking generated tests +=== Invoking generated tests To ensure that provider side is complaint with defined contracts, you need to invoke: `./gradlew generateAccurest test` -== Accurest on consumer side +=== Accurest on consumer side In consumer service you need to configure Accurest plugin in exactly the same way as in case of provider. You need to copy contracts stored in src/test/resources/stubs and generate Wiremock json stubs using: `./gradlew generateWireMockClientStubs` command. Note that `stubsOutputDir` option has to be set for stub generation to work. @@ -179,9 +177,9 @@ class LoanApplicationServiceSpec extends Specification { Underneath LoanApplication makes a call to FraudDetection service. This request is handled by Wiremock server configured using stubs generated by Accurest. -= 2.2. Using in your Maven project +== 2.2. Using in your Maven project -== Add maven plugin +=== Add maven plugin [source,xml,indent=0] ---- @@ -202,7 +200,7 @@ Underneath LoanApplication makes a call to FraudDetection service. This request Read more: [accurest-maven-plugin](https://github.com/Codearte/accurest-maven-plugin) -== Add stubs +=== Add stubs By default Accurest is looking for stubs in `src/test/accurest` directory. Directory containing stub definitions is treated as a class name, and each stub definition is treated as a single test. @@ -219,11 +217,11 @@ Accurest will create test class `defaultBasePackage.MyService` with two methods - `shouldCreateUser()` - `shouldReturnUser()` -== Run plugin +=== Run plugin Plugin goal `generateTests` is assigned to be invoked in phase `generate-test-sources`. You have nothing to do as long as you want it to be part of your build process. If you just want to generate tests please invoke `generateTests` goal. -== Configure plugin +=== Configure plugin To change default configuration just add `configuration` section to plugin definition or `execution` definition. @@ -248,7 +246,7 @@ To change default configuration just add `configuration` section to plugin defin ---- -=== Configuration options +==== Configuration options - **testMode** - defines mode for acceptance tests. By default `MockMvc` which is based on Spring's MockMvc. It can also be changed to `JaxRsClient` or to `Explicit` for real HTTP calls. - **basePackageForTests** - specifies base package for all generated tests. By default set to `io.codearte.accurest.tests`. @@ -259,7 +257,7 @@ To change default configuration just add `configuration` section to plugin defin - **mappingsDir** - dir where the generated Wiremock stubs from Groovy DSL should be placed. - **testFramework** - the target test framework to be used; currently Spock and JUnit are supported with Spock being the default framework -== Base class for tests +==== Base class for tests When using Accurest in default MockMvc you need to create a base specification for all generated acceptance tests. In this class you need to point to endpoint which should be verified. @@ -280,7 +278,7 @@ class MvcSpec extends Specification { In case of using `Explicit` mode, you can use base class to initialize the whole tested app similarly as in regular integration tests. In case of `JAXRSCLIENT` mode this base class should also contain `protected WebTarget webTarget` field, right now the only option to test JAX-RS API is to start a web server. -== Invoking generated tests +=== Invoking generated tests Accurest Maven Plugins generates verification code into directory `/generated-test-sources/accurest` and attach this directory to `testCompile` goal. @@ -320,7 +318,7 @@ For Groovy Spock code use: To ensure that provider side is complaint with defined contracts, you need to invoke `mvn generateTest test` -== Accurest on consumer side +=== Accurest on consumer side In consumer service you need to configure Accurest plugin in exactly the same way as in case of provider. You need to copy contracts stored in `src/test/accurest` and generate Wiremock json stubs using: `mvn generateStubs` command. By default generated WireMock mapping is stored in directory `target/mappings`. Your project should create from this generated mappings additional artifact with classifier `stubs` for easy deploy to maven repository. @@ -1198,10 +1196,10 @@ Some of the properties that are repetitive can be set using system properties or = 9. Migration Guide -= Migration to 0.4.7 +== Migration to 0.4.7 - in 0.4.7 we've fixed package name (coderate to codearte) so you've to do the same in your projects. This means replacing ```io.coderate.accurest.dsl.GroovyDsl``` with ```io.codearte.accurest.dsl.GroovyDsl``` -= Migration to 1.0.0-RC1 +== Migration to 1.0.0-RC1 - from 1.0.0 we're distinguish ignored contracts from excluded contracts: - `excludedFiles` pattern tells Accurest to skip processing those files at all - `ignoredFiles` pattern tells Accurest to generate contracts and tests, but tests will be marked as `@Ignore` @@ -1209,4 +1207,13 @@ Some of the properties that are repetitive can be set using system properties or - from 1.0.0 the `basePackageForTests` behaviour has changed - prior to the change all DSL files had to be under `contractsDslDir`/`basePackageForTests`/*subpackage* resulting in `basePackageForTests`.*subpackage* test package creation - now all DSL files have to be under `contractsDslDir`/*subpackage* resulting in `basePackageForTests`.*subpackage* test package creation - - If you don't migrate to the new approach you will have your tests under `contractsDslDir`.`contractsDslDir`.*subpackage* \ No newline at end of file + - If you don't migrate to the new approach you will have your tests under `contractsDslDir`.`contractsDslDir`.*subpackage* + +== Migration to 1.0.7 +- from 1.0.7 we're setting JUnit as a default testing utility. You have to pass the following option to keep Spock +as your first choice: + +[source,groovy] +---- +include::../../../accurest-gradle-plugin/src/test/resources/functionalTest/scenarioProject/build.gradle[tags=target_framework,indent=0] +---- \ No newline at end of file