Add junit5 support (#690)
* Refactoring: extract class building methods. * Move imports to import providers. * Switch to new TestFramework implementation with TestFrameworkDefinition delegate. Handle ignoring tests correctly in JUnit5. * Implement handling JUnit5 rules. * Add tests for JUNIT5. * Update docs. fixes gh-489
This commit is contained in:
committed by
Marcin Grzejszczak
parent
718cca099b
commit
b48d50edcc
@@ -15,7 +15,7 @@ produced by Spring Cloud Contract Verifier.
|
||||
* Messaging routes, if you're using a messaging service. We integrate with Spring
|
||||
Integration, Spring Cloud Stream, Spring AMQP, and Apache Camel. You can also set your
|
||||
own integrations.
|
||||
* Acceptance tests (in JUnit or Spock) are used to verify if server-side implementation
|
||||
* Acceptance tests (in JUnit 4, JUnit 5 or Spock) are used to verify if server-side implementation
|
||||
of the API is compliant with the contract (__server tests__). A full test is generated by
|
||||
Spring Cloud Contract Verifier.
|
||||
|
||||
@@ -363,8 +363,8 @@ mode for HTTP contracts. However, JAX-RX client and explicit HTTP invocations ca
|
||||
used. (To do so, change the `testMode` property of the plugin to `JAX-RS` or `EXPLICIT`,
|
||||
respectively.)
|
||||
|
||||
Apart from the default JUnit, you can instead use Spock tests, by setting the plugin
|
||||
`testFramework` property to `Spock`.
|
||||
Apart from the default JUnit 4, you can instead use JUnit 5 or Spock tests, by setting the plugin
|
||||
`testFramework` property to either `JUNIT5` or `Spock`.
|
||||
|
||||
TIP: You can now also generate WireMock scenarios based on the contracts, by including an
|
||||
order number followed by an underscore at the beginning of the contract file names.
|
||||
|
||||
@@ -69,8 +69,8 @@ messaging configuration, so you only need the one annotation.
|
||||
=== Publisher-Side Test Generation
|
||||
|
||||
Having the `input` or `outputMessage` sections in your DSL results in creation of tests
|
||||
on the publisher's side. By default, JUnit tests are created. However, there is also a
|
||||
possibility to create Spock tests.
|
||||
on the publisher's side. By default, JUnit 4 tests are created. However, there is also a
|
||||
possibility to create JUnit 5 or Spock tests.
|
||||
|
||||
There are 3 main scenarios that we should take into consideration:
|
||||
|
||||
|
||||
@@ -245,8 +245,8 @@ from the Groovy DSL should be placed. By default its value is
|
||||
`$buildDir/generated-test-sources/contractVerifier`.
|
||||
* *stubsOutputDir*: Specifies the directory where the generated WireMock stubs from
|
||||
the Groovy DSL should be placed.
|
||||
* *targetFramework*: Specifies the target test framework to be used. Currently, Spock and
|
||||
JUnit are supported with JUnit being the default framework.
|
||||
* *targetFramework*: Specifies the target test framework to be used. Currently, Spock, JUnit 4 (`TestFramework.JUNIT` and
|
||||
JUnit 5 are supported with JUnit 4 being the default framework.
|
||||
* *contractsProperties*: a map containing properties to be passed to Spring Cloud Contract
|
||||
components. Those properties might be used by e.g. inbuilt or custom Stub Downloaders.
|
||||
|
||||
@@ -582,8 +582,8 @@ classes.
|
||||
use Spock classes, the class is `spock.lang.Specification`.
|
||||
* *contractsDirectory*: Specifies a directory containing contracts written with the
|
||||
GroovyDSL. The default directory is `/src/test/resources/contracts`.
|
||||
* *testFramework*: Specifies the target test framework to be used. Currently, Spock and
|
||||
JUnit are supported with JUnit being the default framework
|
||||
* *testFramework*: Specifies the target test framework to be used. Currently, Spock, JUnit 4 (`TestFramework.JUNIT` and
|
||||
6JUnit 5 are supported with JUnit 4 being the default framework.
|
||||
* *packageWithBaseClasses*: Defines a package where all the base classes reside. This
|
||||
setting takes precedence over *baseClassForTests*. The convention is such that, if you
|
||||
have a contract under (for example) `src/test/resources/contract/foo/bar/baz/` and set
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.net.URL;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.apache.maven.model.Dependency;
|
||||
@@ -33,6 +34,7 @@ import org.apache.maven.plugins.annotations.Parameter;
|
||||
import org.apache.maven.plugins.annotations.ResolutionScope;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.eclipse.aether.RepositorySystemSession;
|
||||
|
||||
import org.springframework.cloud.contract.maven.verifier.stubrunner.AetherStubDownloaderFactory;
|
||||
import org.springframework.cloud.contract.spec.ContractVerifierException;
|
||||
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties;
|
||||
|
||||
@@ -128,6 +128,10 @@
|
||||
<artifactId>spring-mock-mvc</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-jersey</artifactId>
|
||||
|
||||
@@ -18,9 +18,10 @@ package org.springframework.cloud.contract.verifier.builder
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
import groovy.transform.PackageScope
|
||||
|
||||
import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties
|
||||
import org.springframework.cloud.contract.verifier.config.TestFramework
|
||||
import org.springframework.cloud.contract.verifier.util.NamesUtil
|
||||
import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties
|
||||
|
||||
/**
|
||||
* Builds a class. Adds all the imports, static imports etc.
|
||||
@@ -104,11 +105,16 @@ class ClassBuilder {
|
||||
return this
|
||||
}
|
||||
|
||||
ClassBuilder addImport(List<String> importsToAdd) {
|
||||
ClassBuilder addImports(List<String> importsToAdd) {
|
||||
imports.addAll(importsToAdd)
|
||||
return this
|
||||
}
|
||||
|
||||
ClassBuilder addStaticImports(List<String> importsToAdd) {
|
||||
staticImports.addAll(importsToAdd)
|
||||
return this
|
||||
}
|
||||
|
||||
ClassBuilder addStaticImport(String importToAdd) {
|
||||
staticImports << importToAdd
|
||||
return this
|
||||
@@ -124,13 +130,6 @@ class ClassBuilder {
|
||||
return this
|
||||
}
|
||||
|
||||
private String appendColonIfJUniTest(String field) {
|
||||
if (lang == TestFramework.JUNIT && !field.endsWith(';')) {
|
||||
return "$field;"
|
||||
}
|
||||
return field
|
||||
}
|
||||
|
||||
ClassBuilder addField(List<String> fieldsToAdd) {
|
||||
fields.addAll(fieldsToAdd.collect { appendColonIfJUniTest(it) })
|
||||
return this
|
||||
@@ -202,4 +201,15 @@ class ClassBuilder {
|
||||
void addClassLevelAnnotation(String annotation) {
|
||||
classLevelAnnotations << annotation
|
||||
}
|
||||
|
||||
private String appendColonIfJUniTest(String field) {
|
||||
if (isJUnitType(field)) {
|
||||
return "$field;"
|
||||
}
|
||||
return field
|
||||
}
|
||||
|
||||
private boolean isJUnitType(String field) {
|
||||
TestFramework.JUNIT == lang || TestFramework.JUNIT5 == lang && !field.endsWith(';')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,9 +16,12 @@
|
||||
|
||||
package org.springframework.cloud.contract.verifier.builder
|
||||
|
||||
import java.util.regex.Pattern
|
||||
|
||||
import groovy.json.StringEscapeUtils
|
||||
import groovy.transform.PackageScope
|
||||
import groovy.transform.TypeChecked
|
||||
|
||||
import org.springframework.cloud.contract.spec.Contract
|
||||
import org.springframework.cloud.contract.spec.internal.Cookie
|
||||
import org.springframework.cloud.contract.spec.internal.ExecutionProperty
|
||||
@@ -29,8 +32,6 @@ import org.springframework.cloud.contract.spec.internal.NotToEscapePattern
|
||||
import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties
|
||||
import org.springframework.cloud.contract.verifier.util.MapConverter
|
||||
|
||||
import java.util.regex.Pattern
|
||||
|
||||
import static groovy.json.StringEscapeUtils.escapeJava
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.JUNIT
|
||||
|
||||
@@ -195,7 +196,7 @@ class JUnitMessagingMethodBodyBuilder extends MessagingMethodBodyBuilder {
|
||||
protected String getInputString() {
|
||||
String request = 'ContractVerifierMessage inputMessage = contractVerifierMessaging.create('
|
||||
if (inputMessage.messageBody) {
|
||||
request = "${request}\n\t\t\t\t\"${StringEscapeUtils.escapeJava(bodyAsString)}\"\n"
|
||||
request = "${request}\n\t\t\t\t\"${escapeJava(bodyAsString)}\"\n"
|
||||
}
|
||||
if (inputMessage.messageHeaders) {
|
||||
request = "${request}\t\t\t\t, headers()"
|
||||
|
||||
@@ -16,20 +16,25 @@
|
||||
|
||||
package org.springframework.cloud.contract.verifier.builder
|
||||
|
||||
import java.lang.invoke.MethodHandles
|
||||
|
||||
import groovy.transform.Canonical
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.PackageScope
|
||||
import org.apache.commons.logging.Log
|
||||
import org.apache.commons.logging.LogFactory
|
||||
|
||||
import org.springframework.cloud.contract.spec.Contract
|
||||
import org.springframework.cloud.contract.verifier.builder.imports.HttpImportProvider
|
||||
import org.springframework.cloud.contract.verifier.builder.imports.MessagingImportProvider
|
||||
import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties
|
||||
import org.springframework.cloud.contract.verifier.config.TestFramework
|
||||
import org.springframework.cloud.contract.verifier.config.TestMode
|
||||
import org.springframework.cloud.contract.verifier.file.ContractMetadata
|
||||
|
||||
import java.lang.invoke.MethodHandles
|
||||
|
||||
import static org.springframework.cloud.contract.verifier.builder.imports.BaseImportProvider.getImports
|
||||
import static org.springframework.cloud.contract.verifier.builder.imports.BaseImportProvider.getRuleImport
|
||||
import static org.springframework.cloud.contract.verifier.builder.imports.BaseImportProvider.getStaticImports
|
||||
import static org.springframework.cloud.contract.verifier.util.NamesUtil.capitalize
|
||||
|
||||
/**
|
||||
* Builds a single test for the given {@link ContractVerifierConfigProperties properties}
|
||||
*
|
||||
@@ -48,61 +53,39 @@ class JavaTestGenerator implements SingleTestGenerator {
|
||||
@Override
|
||||
String buildClass(ContractVerifierConfigProperties configProperties, Collection<ContractMetadata> listOfFiles, String className, String classPackage, String includedDirectoryRelativePath) {
|
||||
ClassBuilder clazz = ClassBuilder.createClass(capitalize(className), classPackage, configProperties, includedDirectoryRelativePath)
|
||||
|
||||
if (configProperties.imports) {
|
||||
configProperties.imports.each {
|
||||
clazz.addImport(it)
|
||||
}
|
||||
}
|
||||
|
||||
if (configProperties.staticImports) {
|
||||
configProperties.staticImports.each {
|
||||
clazz.addStaticImport(it)
|
||||
}
|
||||
}
|
||||
|
||||
if (isScenarioClass(listOfFiles)) {
|
||||
clazz.addImport(configProperties.targetFramework.getOrderAnnotationImport())
|
||||
clazz.addImports(configProperties.targetFramework.getOrderAnnotationImports())
|
||||
clazz.addClassLevelAnnotation(configProperties.targetFramework.getOrderAnnotation())
|
||||
}
|
||||
|
||||
addJsonPathRelatedImports(clazz)
|
||||
processContractFiles(listOfFiles, configProperties, clazz)
|
||||
return clazz.build()
|
||||
}
|
||||
|
||||
private void processContractFiles(Collection<ContractMetadata> listOfFiles,
|
||||
ContractVerifierConfigProperties configProperties, ClassBuilder clazz) {
|
||||
Map<ParsedDsl, TestType> contracts = mapContractsToTheirTestTypes(listOfFiles)
|
||||
boolean restAssured2Present = this.checker.isClassPresent(REST_ASSURED_2_0_CLASS)
|
||||
String restAssuredPackage = restAssured2Present ? 'com.jayway.restassured' : 'io.restassured'
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Rest Assured version 2.x found [${restAssured2Present}]")
|
||||
}
|
||||
boolean conditionalImportsAdded = false
|
||||
boolean toIgnore = listOfFiles.ignored.find { it }
|
||||
contracts.each { ParsedDsl key, TestType value ->
|
||||
boolean toIgnore = listOfFiles.ignored.find {it}
|
||||
contracts.each {ParsedDsl key, TestType value ->
|
||||
if (!conditionalImportsAdded) {
|
||||
clazz.addImports(getImports(configProperties.targetFramework))
|
||||
clazz.addStaticImports(getStaticImports(configProperties.targetFramework))
|
||||
if (contracts.values().contains(TestType.HTTP)) {
|
||||
if (configProperties.testMode == TestMode.JAXRSCLIENT) {
|
||||
clazz.addStaticImport('javax.ws.rs.client.Entity.*')
|
||||
if (configProperties.targetFramework == TestFramework.JUNIT) {
|
||||
clazz.addImport('javax.ws.rs.core.Response')
|
||||
}
|
||||
} else if (configProperties.testMode == TestMode.MOCKMVC) {
|
||||
clazz.addStaticImport("${restAssuredPackage}.module.mockmvc.RestAssuredMockMvc.*")
|
||||
} else {
|
||||
clazz.addStaticImport("${restAssuredPackage}.RestAssured.*")
|
||||
}
|
||||
addHttpRelatedEntries(clazz, configProperties)
|
||||
}
|
||||
if (configProperties.targetFramework == TestFramework.JUNIT) {
|
||||
if (contracts.values().contains(TestType.HTTP) && configProperties.testMode == TestMode.MOCKMVC) {
|
||||
clazz.addImport("${restAssuredPackage}.module.mockmvc.specification.MockMvcRequestSpecification")
|
||||
clazz.addImport("${restAssuredPackage}.response.ResponseOptions")
|
||||
} else if (contracts.values().contains(TestType.HTTP) && configProperties.testMode == TestMode.EXPLICIT) {
|
||||
clazz.addImport("${restAssuredPackage}.specification.RequestSpecification")
|
||||
clazz.addImport("${restAssuredPackage}.response.Response")
|
||||
}
|
||||
clazz.addImport('org.junit.Test')
|
||||
}
|
||||
clazz.addStaticImport('org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat')
|
||||
if (configProperties.ruleClassForTests) {
|
||||
clazz.addImport('org.junit.Rule').addRule(configProperties.ruleClassForTests)
|
||||
addRule(configProperties, clazz)
|
||||
}
|
||||
if (contracts.values().contains(TestType.MESSAGING)) {
|
||||
addMessagingRelatedEntries(clazz)
|
||||
@@ -116,8 +99,31 @@ class JavaTestGenerator implements SingleTestGenerator {
|
||||
if (toIgnore) {
|
||||
clazz.addImport(configProperties.targetFramework.getIgnoreClass())
|
||||
}
|
||||
}
|
||||
|
||||
return clazz.build()
|
||||
private void addRule(ContractVerifierConfigProperties configProperties, ClassBuilder clazz) {
|
||||
clazz.addImport(getRuleImport())
|
||||
if (configProperties.targetFramework.annotationLevelRules()) {
|
||||
clazz.addClassLevelAnnotation(configProperties.targetFramework
|
||||
.getRuleAnnotation(configProperties.ruleClassForTests))
|
||||
} else {
|
||||
clazz.addRule(configProperties.ruleClassForTests)
|
||||
}
|
||||
}
|
||||
|
||||
private void addHttpRelatedEntries(ClassBuilder clazz, ContractVerifierConfigProperties configProperties) {
|
||||
HttpImportProvider httpImportProvider = new HttpImportProvider(getRestAssuredPackage())
|
||||
clazz.addImports(httpImportProvider.getImports(configProperties.targetFramework, configProperties.testMode))
|
||||
clazz.addStaticImports(httpImportProvider.getStaticImports(configProperties.targetFramework, configProperties.testMode))
|
||||
}
|
||||
|
||||
private String getRestAssuredPackage() {
|
||||
boolean restAssured2Present = this.checker.isClassPresent(REST_ASSURED_2_0_CLASS)
|
||||
String restAssuredPackage = restAssured2Present ? 'com.jayway.restassured' : 'io.restassured'
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Rest Assured version 2.x found [${restAssured2Present}]")
|
||||
}
|
||||
return restAssuredPackage
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -159,8 +165,8 @@ class JavaTestGenerator implements SingleTestGenerator {
|
||||
}
|
||||
|
||||
private void addJsonPathRelatedImports(ClassBuilder clazz) {
|
||||
clazz.addImport(['com.jayway.jsonpath.DocumentContext',
|
||||
'com.jayway.jsonpath.JsonPath',
|
||||
clazz.addImports(['com.jayway.jsonpath.DocumentContext',
|
||||
'com.jayway.jsonpath.JsonPath',
|
||||
])
|
||||
if (this.checker.isClassPresent(JSON_ASSERT_CLASS)) {
|
||||
clazz.addStaticImport(JSON_ASSERT_STATIC_IMPORT)
|
||||
@@ -169,16 +175,11 @@ class JavaTestGenerator implements SingleTestGenerator {
|
||||
|
||||
private void addMessagingRelatedEntries(ClassBuilder clazz) {
|
||||
clazz.addField(['@Inject ContractVerifierMessaging contractVerifierMessaging',
|
||||
'@Inject ContractVerifierObjectMapper contractVerifierObjectMapper'
|
||||
'@Inject ContractVerifierObjectMapper contractVerifierObjectMapper'
|
||||
])
|
||||
clazz.addImport([ 'javax.inject.Inject',
|
||||
'org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper',
|
||||
'org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessage',
|
||||
'org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging',
|
||||
])
|
||||
clazz.addStaticImport('org.springframework.cloud.contract.verifier.messaging.util.ContractVerifierMessagingUtil.headers')
|
||||
clazz.addImports(MessagingImportProvider.getImports())
|
||||
clazz.addStaticImports(MessagingImportProvider.getStaticImports())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class ClassPresenceChecker {
|
||||
@@ -189,7 +190,7 @@ class ClassPresenceChecker {
|
||||
try {
|
||||
Class.forName(className)
|
||||
return true
|
||||
} catch (ClassNotFoundException e) {
|
||||
} catch (ClassNotFoundException ignored) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("[${className}] is not present on classpath. Will not add a static import.")
|
||||
}
|
||||
|
||||
@@ -19,13 +19,17 @@ package org.springframework.cloud.contract.verifier.builder
|
||||
import groovy.transform.CompileStatic
|
||||
import groovy.transform.PackageScope
|
||||
import groovy.util.logging.Slf4j
|
||||
|
||||
import org.springframework.cloud.contract.spec.Contract
|
||||
import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties
|
||||
import org.springframework.cloud.contract.verifier.config.TestFramework
|
||||
import org.springframework.cloud.contract.verifier.config.TestMode
|
||||
import org.springframework.cloud.contract.verifier.file.ContractMetadata
|
||||
import org.springframework.cloud.contract.verifier.util.NamesUtil
|
||||
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.JUNIT
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.JUNIT5
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.SPOCK
|
||||
|
||||
/**
|
||||
* Builds a test method. Adds an ignore annotation on a method if necessary.
|
||||
*
|
||||
@@ -57,7 +61,7 @@ class MethodBuilder {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Stub content Groovy DSL [$stubContent]")
|
||||
}
|
||||
String methodName = methodName(contract, stubsFile, stubContent)
|
||||
String methodName = MethodBuilder.methodName(contract, stubsFile, stubContent)
|
||||
return new MethodBuilder(methodName, stubContent, configProperties, contract.ignored || stubContent.ignored)
|
||||
}
|
||||
|
||||
@@ -91,11 +95,11 @@ class MethodBuilder {
|
||||
* Appends to the {@link BlockBuilder} the contents of the test
|
||||
*/
|
||||
void appendTo(BlockBuilder blockBuilder) {
|
||||
if (configProperties.targetFramework == TestFramework.JUNIT) {
|
||||
if (isJUnitType()) {
|
||||
blockBuilder.addLine('@Test')
|
||||
}
|
||||
if (ignored) {
|
||||
blockBuilder.addLine('@Ignore')
|
||||
blockBuilder.addLine(configProperties.targetFramework.ignoreAnnotation)
|
||||
}
|
||||
blockBuilder.addLine(configProperties.targetFramework.methodModifier + "validate_$methodName() throws Exception {")
|
||||
getMethodBodyBuilder().appendTo(blockBuilder)
|
||||
@@ -104,26 +108,29 @@ class MethodBuilder {
|
||||
|
||||
private MethodBodyBuilder getMethodBodyBuilder() {
|
||||
if (stubContent.input || stubContent.outputMessage) {
|
||||
if (configProperties.targetFramework == TestFramework.JUNIT) {
|
||||
if (isJUnitType()) {
|
||||
return new JUnitMessagingMethodBodyBuilder(stubContent, configProperties)
|
||||
}
|
||||
return new SpockMessagingMethodBodyBuilder(stubContent, configProperties)
|
||||
}
|
||||
if (configProperties.testMode == TestMode.JAXRSCLIENT) {
|
||||
if (configProperties.targetFramework == TestFramework.JUNIT) {
|
||||
if (isJUnitType()) {
|
||||
return new JaxRsClientJUnitMethodBodyBuilder(stubContent, configProperties)
|
||||
}
|
||||
return new JaxRsClientSpockMethodRequestProcessingBodyBuilder(stubContent, configProperties)
|
||||
} else if (configProperties.testMode == TestMode.EXPLICIT) {
|
||||
if (configProperties.targetFramework == TestFramework.JUNIT) {
|
||||
if (isJUnitType()) {
|
||||
return new ExplicitJUnitMethodBodyBuilder(stubContent, configProperties)
|
||||
}
|
||||
// in Groovy we're using def so we don't have to update the imports
|
||||
return new MockMvcSpockMethodRequestProcessingBodyBuilder(stubContent, configProperties)
|
||||
} else if (configProperties.targetFramework == TestFramework.SPOCK) {
|
||||
} else if (configProperties.targetFramework == SPOCK) {
|
||||
return new MockMvcSpockMethodRequestProcessingBodyBuilder(stubContent, configProperties)
|
||||
}
|
||||
return new MockMvcJUnitMethodBodyBuilder(stubContent, configProperties)
|
||||
}
|
||||
|
||||
private boolean isJUnitType() {
|
||||
return JUNIT == configProperties.targetFramework || JUNIT5 == configProperties.targetFramework
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
package org.springframework.cloud.contract.verifier.builder.imports
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
|
||||
import org.springframework.cloud.contract.verifier.config.TestFramework
|
||||
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.CUSTOM
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.JUNIT
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.JUNIT5
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.SPOCK
|
||||
|
||||
/**
|
||||
* Provides imports based on test framework.
|
||||
*
|
||||
* @author Olga Maciaszek-Sharma
|
||||
*
|
||||
* @since 2.1.0
|
||||
*/
|
||||
@CompileStatic
|
||||
class BaseImportProvider {
|
||||
|
||||
private static final ImportDefinitions GENERAL_IMPORTS = new ImportDefinitions([], [
|
||||
'org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat'
|
||||
])
|
||||
|
||||
private static
|
||||
final Map<TestFramework, ImportDefinitions> TEST_FRAMEWORK_SPECIFIC_IMPORTS = [
|
||||
(JUNIT) : new ImportDefinitions(['org.junit.Test']),
|
||||
(JUNIT5): new ImportDefinitions(['org.junit.jupiter.api.Test']),
|
||||
(SPOCK) : new ImportDefinitions([]),
|
||||
(CUSTOM): new ImportDefinitions([])]
|
||||
|
||||
private static final Map<TestFramework, String> RULE_IMPORT = [
|
||||
(JUNIT) : 'org.junit.Rule',
|
||||
(JUNIT5): 'org.junit.jupiter.api.extension.ExtendWith',
|
||||
(SPOCK) : 'org.junit.Rule',
|
||||
(CUSTOM): 'org.junit.Rule'
|
||||
]
|
||||
|
||||
/**
|
||||
* Returns list of imports for provided test framework.
|
||||
* @param testFramework
|
||||
* @return list of imports
|
||||
*/
|
||||
static List<String> getImports(TestFramework testFramework) {
|
||||
return GENERAL_IMPORTS.imports + TEST_FRAMEWORK_SPECIFIC_IMPORTS.get(testFramework).imports
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns list of static imports for provided test framework.
|
||||
* @param testFramework
|
||||
* @return
|
||||
*/
|
||||
static List<String> getStaticImports(TestFramework testFramework) {
|
||||
return GENERAL_IMPORTS.staticImports + TEST_FRAMEWORK_SPECIFIC_IMPORTS.get(testFramework).staticImports
|
||||
}
|
||||
|
||||
static String getRuleImport(TestFramework testFramework) {
|
||||
return RULE_IMPORT.get(testFramework)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
package org.springframework.cloud.contract.verifier.builder.imports
|
||||
|
||||
import org.springframework.cloud.contract.verifier.config.TestFramework
|
||||
import org.springframework.cloud.contract.verifier.config.TestMode
|
||||
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.CUSTOM
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.JUNIT
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.JUNIT5
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.SPOCK
|
||||
import static org.springframework.cloud.contract.verifier.config.TestMode.EXPLICIT
|
||||
import static org.springframework.cloud.contract.verifier.config.TestMode.JAXRSCLIENT
|
||||
import static org.springframework.cloud.contract.verifier.config.TestMode.MOCKMVC
|
||||
|
||||
/**
|
||||
* Provides imports based on test framework and test mode.
|
||||
*
|
||||
* @author Olga Maciaszek-Sharma
|
||||
*
|
||||
* @since 2.1.0
|
||||
*/
|
||||
class HttpImportProvider {
|
||||
|
||||
private final Map<TestMode, ImportDefinitions> TEST_MODE_SPECIFIC_IMPORTS = [
|
||||
(JAXRSCLIENT): new ImportDefinitions([], ['javax.ws.rs.client.Entity.*']),
|
||||
(MOCKMVC) : new ImportDefinitions([], ["${restAssuredPackage}.module.mockmvc.RestAssuredMockMvc.*"]),
|
||||
(EXPLICIT) : new ImportDefinitions([], ["${restAssuredPackage}.RestAssured.*"])]
|
||||
|
||||
private final Map<Tuple2<TestFramework, TestMode>, ImportDefinitions> FRAMEWORK_AND_TEST_MODE_SPECIFIC_IMPORTS = [
|
||||
(new Tuple2(JUNIT, JAXRSCLIENT)) : new ImportDefinitions(['javax.ws.rs.core.Response']),
|
||||
(new Tuple2(JUNIT5, JAXRSCLIENT)): new ImportDefinitions(['javax.ws.rs.core.Response']),
|
||||
(new Tuple2(JUNIT, MOCKMVC)) : new ImportDefinitions([
|
||||
"${restAssuredPackage}.module.mockmvc.specification.MockMvcRequestSpecification",
|
||||
"${restAssuredPackage}.response.ResponseOptions"]),
|
||||
(new Tuple2(JUNIT5, MOCKMVC)) : new ImportDefinitions([
|
||||
"${restAssuredPackage}.module.mockmvc.specification.MockMvcRequestSpecification",
|
||||
"${restAssuredPackage}.response.ResponseOptions"]),
|
||||
(new Tuple2(JUNIT, EXPLICIT)) : new ImportDefinitions(["${restAssuredPackage}.specification.RequestSpecification",
|
||||
"${restAssuredPackage}.response.Response"]),
|
||||
(new Tuple2(JUNIT5, EXPLICIT)) : new ImportDefinitions(["${restAssuredPackage}.specification.RequestSpecification",
|
||||
"${restAssuredPackage}.response.Response"]),
|
||||
(new Tuple2(SPOCK, JAXRSCLIENT)) : new ImportDefinitions([]),
|
||||
(new Tuple2(CUSTOM, JAXRSCLIENT)): new ImportDefinitions([]),
|
||||
(new Tuple2(SPOCK, MOCKMVC)) : new ImportDefinitions([]),
|
||||
(new Tuple2(CUSTOM, MOCKMVC)) : new ImportDefinitions([]),
|
||||
(new Tuple2(SPOCK, EXPLICIT)) : new ImportDefinitions([]),
|
||||
(new Tuple2(CUSTOM, EXPLICIT)) : new ImportDefinitions([])
|
||||
]
|
||||
|
||||
private final String restAssuredPackage
|
||||
|
||||
HttpImportProvider(String restAssuredPackage) {
|
||||
this.restAssuredPackage = restAssuredPackage
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns list of imports for http test contracts for provided test framework and test mode.
|
||||
* @param testFramework
|
||||
* @param testMode
|
||||
* @return list of imports
|
||||
*/
|
||||
List<String> getImports(TestFramework testFramework, TestMode testMode) {
|
||||
return TEST_MODE_SPECIFIC_IMPORTS.get(testMode).imports +
|
||||
FRAMEWORK_AND_TEST_MODE_SPECIFIC_IMPORTS.get(new Tuple2(testFramework, testMode)).imports
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns list of static imports for http test contracts for provided test framework and test mode.
|
||||
* @param testFramework
|
||||
* @param testMode
|
||||
* @return list of static imports
|
||||
*/
|
||||
List<String> getStaticImports(TestFramework testFramework, TestMode testMode) {
|
||||
return TEST_MODE_SPECIFIC_IMPORTS.get(testMode).staticImports +
|
||||
FRAMEWORK_AND_TEST_MODE_SPECIFIC_IMPORTS.get(new Tuple2(testFramework, testMode)).staticImports
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package org.springframework.cloud.contract.verifier.builder.imports
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
import groovy.transform.PackageScope
|
||||
|
||||
/**
|
||||
* @author Olga Maciaszek-Sharma
|
||||
*
|
||||
* @since 2.1.0
|
||||
*/
|
||||
@CompileStatic
|
||||
@PackageScope
|
||||
class ImportDefinitions {
|
||||
|
||||
final List<String> imports
|
||||
final List<String> staticImports
|
||||
|
||||
ImportDefinitions(List<String> imports, List<String> staticImports = []) {
|
||||
this.imports = imports
|
||||
this.staticImports = staticImports
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package org.springframework.cloud.contract.verifier.builder.imports
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
|
||||
/**
|
||||
* Provides imports based on test framework and test mode.
|
||||
*
|
||||
* @author Olga Maciaszek-Sharma
|
||||
*
|
||||
* @since 2.1.0
|
||||
*/
|
||||
@CompileStatic
|
||||
class MessagingImportProvider {
|
||||
|
||||
/**
|
||||
* @return list of imports for messaging test contracts.
|
||||
*/
|
||||
static List<String> getImports() {
|
||||
return ['javax.inject.Inject',
|
||||
'org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper',
|
||||
'org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessage',
|
||||
'org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging',
|
||||
]
|
||||
}
|
||||
|
||||
/**
|
||||
* @return list of static imports for messaging test contracts.
|
||||
*/
|
||||
static List<String> getStaticImports() {
|
||||
return ['org.springframework.cloud.contract.verifier.messaging.util.ContractVerifierMessagingUtil.headers']
|
||||
}
|
||||
}
|
||||
@@ -16,68 +16,105 @@
|
||||
|
||||
package org.springframework.cloud.contract.verifier.config
|
||||
|
||||
import org.springframework.cloud.contract.verifier.config.framework.CustomDefinition
|
||||
import org.springframework.cloud.contract.verifier.config.framework.JUnit5Definition
|
||||
import org.springframework.cloud.contract.verifier.config.framework.JUnitDefinition
|
||||
import org.springframework.cloud.contract.verifier.config.framework.SpockDefinition
|
||||
import org.springframework.cloud.contract.verifier.config.framework.TestFrameworkDefinition
|
||||
|
||||
/**
|
||||
* Contains main building blocks for a test class for the given framework
|
||||
*
|
||||
* @author Jakub Kubrynski, codearte.io
|
||||
* @author Olga Maciaszek-Sharma
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
enum TestFramework {
|
||||
JUNIT("public ", "public void ", ";", ".java", "Test", "org.junit.Ignore", ["org.junit.FixMethodOrder", "org.junit.runners.MethodSorters"], "@FixMethodOrder(MethodSorters.NAME_ASCENDING)"),
|
||||
SPOCK("", "def ", "", ".groovy", "Spec", "spock.lang.Ignore", ["spock.lang.Stepwise"], "@Stepwise"),
|
||||
CUSTOM("", "", "", "", "", "", [], "")
|
||||
|
||||
private final String classModifier
|
||||
private final String methodModifier
|
||||
private final String lineSuffix
|
||||
private final String classExtension
|
||||
private final String classNameSuffix
|
||||
private final String ignoreClass
|
||||
private final List<String> orderAnnotationImports
|
||||
private final String orderAnnotation
|
||||
SPOCK(new SpockDefinition()),
|
||||
JUNIT(new JUnitDefinition()),
|
||||
JUNIT5(new JUnit5Definition()),
|
||||
CUSTOM(new CustomDefinition())
|
||||
|
||||
@Delegate
|
||||
private final TestFrameworkDefinition testFrameworkDefinition
|
||||
|
||||
|
||||
TestFramework(TestFrameworkDefinition testFrameworkDefinition) {
|
||||
this.testFrameworkDefinition = testFrameworkDefinition
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #TestFramework(TestFrameworkDefinition)}
|
||||
* @param classModifier
|
||||
* @param methodModifier
|
||||
* @param lineSuffix
|
||||
* @param classExtension
|
||||
* @param classNameSuffix
|
||||
* @param ignoreClass
|
||||
* @param orderAnnotationImports
|
||||
* @param orderAnnotation
|
||||
*/
|
||||
@Deprecated
|
||||
TestFramework(String classModifier, String methodModifier, String lineSuffix, String classExtension, String classNameSuffix,
|
||||
String ignoreClass, List<String> orderAnnotationImports, String orderAnnotation) {
|
||||
this.classModifier = classModifier
|
||||
this.lineSuffix = lineSuffix
|
||||
this.methodModifier = methodModifier
|
||||
this.classExtension = classExtension
|
||||
this.classNameSuffix = classNameSuffix
|
||||
this.ignoreClass = ignoreClass
|
||||
this.orderAnnotationImports = orderAnnotationImports
|
||||
this.orderAnnotation = orderAnnotation
|
||||
}
|
||||
testFrameworkDefinition = new TestFrameworkDefinition() {
|
||||
|
||||
String getClassModifier() {
|
||||
return classModifier
|
||||
}
|
||||
@Override
|
||||
String getClassModifier() {
|
||||
return classModifier
|
||||
}
|
||||
|
||||
String getMethodModifier() {
|
||||
return methodModifier
|
||||
}
|
||||
@Override
|
||||
String getMethodModifier() {
|
||||
return methodModifier
|
||||
}
|
||||
|
||||
String getLineSuffix() {
|
||||
return lineSuffix
|
||||
}
|
||||
@Override
|
||||
String getLineSuffix() {
|
||||
return lineSuffix
|
||||
}
|
||||
|
||||
String getClassExtension() {
|
||||
return classExtension
|
||||
}
|
||||
@Override
|
||||
String getClassExtension() {
|
||||
return classExtension
|
||||
}
|
||||
|
||||
String getClassNameSuffix() {
|
||||
return classNameSuffix
|
||||
}
|
||||
@Override
|
||||
String getClassNameSuffix() {
|
||||
return classNameSuffix
|
||||
}
|
||||
|
||||
String getIgnoreClass() {
|
||||
return ignoreClass
|
||||
}
|
||||
@Override
|
||||
String getIgnoreClass() {
|
||||
return ignoreClass
|
||||
}
|
||||
|
||||
List<String> getOrderAnnotationImport() {
|
||||
return orderAnnotationImports
|
||||
}
|
||||
@Override
|
||||
List<String> getOrderAnnotationImports() {
|
||||
return orderAnnotationImports
|
||||
}
|
||||
|
||||
String getOrderAnnotation() {
|
||||
return orderAnnotation
|
||||
@Override
|
||||
String getOrderAnnotation() {
|
||||
return orderAnnotation
|
||||
}
|
||||
|
||||
@Override
|
||||
String getIgnoreAnnotation() {
|
||||
return '@Ignore'
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean annotationLevelRules() {
|
||||
return false
|
||||
}
|
||||
|
||||
@Override
|
||||
String getRuleAnnotation(String annotationValue) {
|
||||
throw new UnsupportedOperationException('Not available in framework.')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package org.springframework.cloud.contract.verifier.config.framework
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
|
||||
/**
|
||||
* Defines elements characteristic of Custom test framework to be used during test class construction.
|
||||
*
|
||||
* @author Olga Maciaszek-Sharma
|
||||
*
|
||||
* @since 2.1.0
|
||||
*/
|
||||
@CompileStatic
|
||||
class CustomDefinition implements TestFrameworkDefinition {
|
||||
|
||||
@Override
|
||||
String getClassModifier() {
|
||||
return ''
|
||||
}
|
||||
|
||||
@Override
|
||||
String getMethodModifier() {
|
||||
return ''
|
||||
}
|
||||
|
||||
@Override
|
||||
String getLineSuffix() {
|
||||
return ''
|
||||
}
|
||||
|
||||
@Override
|
||||
String getClassExtension() {
|
||||
return ''
|
||||
}
|
||||
|
||||
@Override
|
||||
String getClassNameSuffix() {
|
||||
return ''
|
||||
}
|
||||
|
||||
@Override
|
||||
String getIgnoreClass() {
|
||||
return ''
|
||||
}
|
||||
|
||||
@Override
|
||||
List<String> getOrderAnnotationImports() {
|
||||
return []
|
||||
}
|
||||
|
||||
@Override
|
||||
String getOrderAnnotation() {
|
||||
return ''
|
||||
}
|
||||
|
||||
@Override
|
||||
String getIgnoreAnnotation() {
|
||||
return '@Ignore'
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean annotationLevelRules() {
|
||||
return false
|
||||
}
|
||||
|
||||
@Override
|
||||
String getRuleAnnotation(String annotationValue) {
|
||||
throw new UnsupportedOperationException('Not available in framework.')
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package org.springframework.cloud.contract.verifier.config.framework
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
|
||||
/**
|
||||
* Defines elements characteristic of JUnit5 test framework to be used during test class construction.
|
||||
*
|
||||
* @author Olga Maciaszek-Sharma
|
||||
*
|
||||
* @since 2.1.0
|
||||
*/
|
||||
@CompileStatic
|
||||
class JUnit5Definition implements TestFrameworkDefinition {
|
||||
|
||||
@Override
|
||||
String getClassModifier() {
|
||||
return 'public '
|
||||
}
|
||||
|
||||
@Override
|
||||
String getMethodModifier() {
|
||||
return 'public void '
|
||||
}
|
||||
|
||||
@Override
|
||||
String getLineSuffix() {
|
||||
return ';'
|
||||
}
|
||||
|
||||
@Override
|
||||
String getClassExtension() {
|
||||
'.java'
|
||||
}
|
||||
|
||||
@Override
|
||||
String getClassNameSuffix() {
|
||||
return 'Test'
|
||||
}
|
||||
|
||||
@Override
|
||||
String getIgnoreClass() {
|
||||
return 'org.junit.jupiter.api.Disabled'
|
||||
}
|
||||
|
||||
@Override
|
||||
List<String> getOrderAnnotationImports() {
|
||||
throw new UnsupportedOperationException('Not implemented yet in JUnit5 - https://github.com/junit-team/junit5/issues/48')
|
||||
}
|
||||
|
||||
@Override
|
||||
String getOrderAnnotation() {
|
||||
throw new UnsupportedOperationException('Not implemented yet in JUnit5 - https://github.com/junit-team/junit5/issues/48')
|
||||
}
|
||||
|
||||
@Override
|
||||
String getIgnoreAnnotation() {
|
||||
return '@Disabled'
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean annotationLevelRules() {
|
||||
return true
|
||||
}
|
||||
|
||||
@Override
|
||||
String getRuleAnnotation(String annotationValue) {
|
||||
return ("@ExtendWith(${annotationValue}.class)")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package org.springframework.cloud.contract.verifier.config.framework
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
|
||||
/**
|
||||
* Defines elements characteristic of JUnit test framework to be used during test class construction.
|
||||
*
|
||||
* @author Olga Maciaszek-Sharma
|
||||
*
|
||||
* @since 2.1.0
|
||||
*/
|
||||
@CompileStatic
|
||||
class JUnitDefinition implements TestFrameworkDefinition {
|
||||
|
||||
@Override
|
||||
String getClassModifier() {
|
||||
return 'public '
|
||||
}
|
||||
|
||||
@Override
|
||||
String getMethodModifier() {
|
||||
return 'public void '
|
||||
}
|
||||
|
||||
@Override
|
||||
String getLineSuffix() {
|
||||
return ';'
|
||||
}
|
||||
|
||||
@Override
|
||||
String getClassExtension() {
|
||||
return '.java'
|
||||
}
|
||||
|
||||
@Override
|
||||
String getClassNameSuffix() {
|
||||
return 'Test'
|
||||
}
|
||||
|
||||
@Override
|
||||
String getIgnoreClass() {
|
||||
return 'org.junit.Ignore'
|
||||
}
|
||||
|
||||
@Override
|
||||
List<String> getOrderAnnotationImports() {
|
||||
return ['org.junit.FixMethodOrder', 'org.junit.runners.MethodSorters']
|
||||
}
|
||||
|
||||
@Override
|
||||
String getOrderAnnotation() {
|
||||
return '@FixMethodOrder(MethodSorters.NAME_ASCENDING)'
|
||||
}
|
||||
|
||||
@Override
|
||||
String getIgnoreAnnotation() {
|
||||
return '@Ignore'
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean annotationLevelRules() {
|
||||
return false
|
||||
}
|
||||
|
||||
@Override
|
||||
String getRuleAnnotation(String annotationValue) {
|
||||
throw new UnsupportedOperationException('Not available in JUnit.')
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package org.springframework.cloud.contract.verifier.config.framework
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
|
||||
/**
|
||||
* Defines elements characteristic of Spock test framework to be used during test class construction.
|
||||
*
|
||||
* @author Olga Maciaszek-Sharma
|
||||
*
|
||||
* @since 2.1.0
|
||||
*/
|
||||
@CompileStatic
|
||||
class SpockDefinition implements TestFrameworkDefinition {
|
||||
|
||||
@Override
|
||||
String getClassModifier() {
|
||||
return ''
|
||||
}
|
||||
|
||||
@Override
|
||||
String getMethodModifier() {
|
||||
return 'def '
|
||||
}
|
||||
|
||||
@Override
|
||||
String getLineSuffix() {
|
||||
return ''
|
||||
}
|
||||
|
||||
@Override
|
||||
String getClassExtension() {
|
||||
return '.groovy'
|
||||
}
|
||||
|
||||
@Override
|
||||
String getClassNameSuffix() {
|
||||
return 'Spec'
|
||||
}
|
||||
|
||||
@Override
|
||||
String getIgnoreClass() {
|
||||
return 'spock.lang.Ignore'
|
||||
}
|
||||
|
||||
@Override
|
||||
List<String> getOrderAnnotationImports() {
|
||||
return ['spock.lang.Stepwise']
|
||||
}
|
||||
|
||||
@Override
|
||||
String getOrderAnnotation() {
|
||||
return '@Stepwise'
|
||||
}
|
||||
|
||||
@Override
|
||||
String getIgnoreAnnotation() {
|
||||
return '@Ignore'
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean annotationLevelRules() {
|
||||
return false
|
||||
}
|
||||
|
||||
@Override
|
||||
String getRuleAnnotation(String annotationValue) {
|
||||
throw new UnsupportedOperationException('Not available in Spock.')
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package org.springframework.cloud.contract.verifier.config.framework
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
|
||||
/**
|
||||
* Defines elements characteristic of a given test framework to be used during test class construction.
|
||||
*
|
||||
* @author Olga Maciaszek-Sharma
|
||||
*
|
||||
* @since 2.1.0
|
||||
*/
|
||||
@CompileStatic
|
||||
interface TestFrameworkDefinition {
|
||||
|
||||
/**
|
||||
* Returns the class access level modifier. E.g. for Java tests that would mean {@code public}
|
||||
**/
|
||||
String getClassModifier()
|
||||
|
||||
/**
|
||||
* Returns the method access level modifier along with the return type.
|
||||
* E.g. for Java tests that would mean {@code public void}
|
||||
**/
|
||||
String getMethodModifier()
|
||||
|
||||
/**
|
||||
* Returns the characters that should end each line. E.g. for Java tests that would mean {@code ;}
|
||||
**/
|
||||
String getLineSuffix()
|
||||
|
||||
/**
|
||||
* Returns the file extension. E.g. for Java tests that would be {@code .java}
|
||||
**/
|
||||
String getClassExtension()
|
||||
|
||||
/**
|
||||
* Returns the test class name suffix. E.g. for JUnit tests that would be {@code Test}
|
||||
**/
|
||||
String getClassNameSuffix()
|
||||
|
||||
/**
|
||||
* Returns the qualified name of the class used to ignore or disable tests. E.g. for JUnit 4 tests that would
|
||||
* be {@code org.junit.Ignore}
|
||||
**/
|
||||
String getIgnoreClass()
|
||||
|
||||
/**
|
||||
* Returns the qualified names of the classes that are used for arranging tests into scenarios.
|
||||
* E.g. for JUnit 4 tests that would be {@code 'org.junit.FixMethodOrder'}, {@code 'org.junit.runners.MethodSorters'}
|
||||
**/
|
||||
List<String> getOrderAnnotationImports()
|
||||
|
||||
/**
|
||||
* Returns the annotation used for arranging tests into scenarios.
|
||||
* E.g. for JUnit test that would be {@code @FixMethodOrder(MethodSorters.NAME_ASCENDING)}
|
||||
**/
|
||||
String getOrderAnnotation()
|
||||
|
||||
/**
|
||||
* Returns the annotation used for ignoring or disabling tests. E.g. for JUnit tests that would mean {@code @Ignore}
|
||||
**/
|
||||
String getIgnoreAnnotation()
|
||||
|
||||
/**
|
||||
* Returns a boolean indicating whether an annotation-type rule or extension is being used or not.
|
||||
* E.g. for JUnit 5 tests that would return {@code true}
|
||||
**/
|
||||
boolean annotationLevelRules()
|
||||
|
||||
/**
|
||||
* Returns the test rule or extension annotation with the {@annotationValue} passed as an argument.
|
||||
* E.g. for JUnit 5 tests that could be {@code @ExtendWith(Example.class)}
|
||||
**/
|
||||
String getRuleAnnotation(String annotationValue)
|
||||
}
|
||||
@@ -16,10 +16,12 @@
|
||||
|
||||
package org.springframework.cloud.contract.verifier
|
||||
|
||||
import spock.lang.Specification
|
||||
|
||||
import org.springframework.cloud.contract.verifier.builder.JavaTestGenerator
|
||||
import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties
|
||||
import org.springframework.cloud.contract.verifier.config.TestFramework
|
||||
import spock.lang.Specification
|
||||
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.SPOCK
|
||||
|
||||
class GeneratorScannerSpec extends Specification {
|
||||
|
||||
@@ -39,7 +41,7 @@ class GeneratorScannerSpec extends Specification {
|
||||
|
||||
def "should create class with full package"() {
|
||||
given:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties(targetFramework: TestFramework.SPOCK)
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties(targetFramework: SPOCK)
|
||||
properties.contractsDslDir = new File(this.getClass().getResource("/directory/with/stubs/package").toURI())
|
||||
TestGenerator testGenerator = new TestGenerator(properties, classGenerator, Stub(FileSaver))
|
||||
when:
|
||||
|
||||
@@ -18,17 +18,23 @@ package org.springframework.cloud.contract.verifier.builder
|
||||
|
||||
import org.junit.Rule
|
||||
import org.junit.rules.TemporaryFolder
|
||||
import spock.lang.Issue
|
||||
import spock.lang.Specification
|
||||
|
||||
import org.springframework.cloud.contract.verifier.TestGenerator
|
||||
import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties
|
||||
import org.springframework.cloud.contract.verifier.config.TestFramework
|
||||
import org.springframework.cloud.contract.verifier.config.TestMode
|
||||
import org.springframework.cloud.contract.verifier.file.ContractMetadata
|
||||
import org.springframework.cloud.contract.verifier.util.SyntaxChecker
|
||||
import org.springframework.util.StringUtils
|
||||
import spock.lang.Issue
|
||||
import spock.lang.Specification
|
||||
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.JUNIT
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.JUNIT5
|
||||
import static org.springframework.cloud.contract.verifier.config.TestFramework.SPOCK
|
||||
import static org.springframework.cloud.contract.verifier.config.TestMode.EXPLICIT
|
||||
import static org.springframework.cloud.contract.verifier.config.TestMode.JAXRSCLIENT
|
||||
import static org.springframework.cloud.contract.verifier.config.TestMode.MOCKMVC
|
||||
import static org.springframework.cloud.contract.verifier.util.ContractVerifierDslConverter.convertAsCollection
|
||||
|
||||
class SingleTestGeneratorSpec extends Specification {
|
||||
@@ -49,7 +55,6 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
'@FixMethodOrder(MethodSorters.NAME_ASCENDING)', '@Test', '@Ignore', 'import io.restassured.module.mockmvc.specification.MockMvcRequestSpecification;',
|
||||
'import io.restassured.response.ResponseOptions;', 'import static org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat']
|
||||
|
||||
|
||||
private static final List<String> explicitJUnitRestAssured2ClassStrings = ['import com.jayway.jsonpath.DocumentContext;', 'import com.jayway.jsonpath.JsonPath;',
|
||||
'import org.junit.FixMethodOrder;', 'import org.junit.Ignore;', 'import org.junit.Test;', 'import org.junit.runners.MethodSorters;',
|
||||
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson;', 'import static com.jayway.restassured.RestAssured.*;',
|
||||
@@ -62,6 +67,34 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
'@FixMethodOrder(MethodSorters.NAME_ASCENDING)', '@Test', '@Ignore', 'import io.restassured.specification.RequestSpecification;',
|
||||
'import io.restassured.response.Response;', 'import static org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat']
|
||||
|
||||
private static
|
||||
final List<String> mockMvcJUnit5RestAssured2ClassStrings = ['import com.jayway.jsonpath.DocumentContext;', 'import com.jayway.jsonpath.JsonPath;',
|
||||
'import org.junit.jupiter.api.Disabled;', 'import org.junit.jupiter.api.Test;',
|
||||
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson;', 'import static com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*;',
|
||||
'@Test', '@Disabled', 'import com.jayway.restassured.module.mockmvc.specification.MockMvcRequestSpecification;',
|
||||
'import com.jayway.restassured.response.ResponseOptions;', 'import static org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat']
|
||||
private static
|
||||
final List<String> mockMvcJUnit5RestAssured3ClassStrings = ['import com.jayway.jsonpath.DocumentContext;', 'import com.jayway.jsonpath.JsonPath;',
|
||||
'import org.junit.jupiter.api.Disabled;', 'import org.junit.jupiter.api.Test;',
|
||||
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson;', 'import static io.restassured.module.mockmvc.RestAssuredMockMvc.*;',
|
||||
'@Test', '@Disabled', 'import io.restassured.module.mockmvc.specification.MockMvcRequestSpecification;',
|
||||
'import io.restassured.response.ResponseOptions;', 'import static org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat']
|
||||
|
||||
private static
|
||||
final List<String> explicitJUnit5RestAssured2ClassStrings = ['import com.jayway.jsonpath.DocumentContext;', 'import com.jayway.jsonpath.JsonPath;',
|
||||
'import org.junit.jupiter.api.Disabled;', 'import org.junit.jupiter.api.Test;',
|
||||
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson;', 'import static com.jayway.restassured.RestAssured.*;',
|
||||
'@Test', '@Disabled', 'import com.jayway.restassured.specification.RequestSpecification;',
|
||||
'import com.jayway.restassured.response.Response;', 'import static org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat']
|
||||
|
||||
private static
|
||||
final List<String> explicitJUnit5RestAssured3ClassStrings = ['import com.jayway.jsonpath.DocumentContext;', 'import com.jayway.jsonpath.JsonPath;',
|
||||
'import org.junit.jupiter.api.Disabled;', 'import org.junit.jupiter.api.Test;',
|
||||
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson;', 'import static io.restassured.RestAssured.*;',
|
||||
'@Test', '@Disabled', 'import io.restassured.specification.RequestSpecification;',
|
||||
'import io.restassured.response.Response;', 'import static org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat']
|
||||
|
||||
|
||||
private static final List<String> spockClassRestAssured2Strings = ['import com.jayway.jsonpath.DocumentContext', 'import com.jayway.jsonpath.JsonPath',
|
||||
'import spock.lang.Ignore', 'import spock.lang.Specification', 'import spock.lang.Stepwise',
|
||||
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson', 'import static com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*',
|
||||
@@ -85,23 +118,23 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
public static final Closure JAVA_ASSERTER = { String classToTest ->
|
||||
String name = Math.abs(new Random().nextInt())
|
||||
String changedTest = classToTest
|
||||
.replace("public class Test", "public class Test${name}")
|
||||
.replace("public class ContractsTest", "public class Test${name}")
|
||||
.replace('public class Test', "public class Test${name}")
|
||||
.replace('public class ContractsTest', "public class Test${name}")
|
||||
String fqn = FQN(classToTest)
|
||||
SyntaxChecker.tryToCompileJavaWithoutImports("${fqn}${name}", changedTest)
|
||||
}
|
||||
|
||||
static String FQN(String classToTest) {
|
||||
return classToTest.contains("0_1_0_dev_1_uncommitted_d1174dd") ?
|
||||
"org.springframework.cloud.contract.verifier.tests.com_uscm.dale_api44_spec._0_1_0_dev_1_uncommitted_d1174dd.Test" :
|
||||
"test.Test"
|
||||
return classToTest.contains('0_1_0_dev_1_uncommitted_d1174dd') ?
|
||||
'org.springframework.cloud.contract.verifier.tests.com_uscm.dale_api44_spec._0_1_0_dev_1_uncommitted_d1174dd.Test' :
|
||||
'test.Test'
|
||||
}
|
||||
|
||||
public static final Closure JAVA_JAXRS_ASSERTER = { String classToTest ->
|
||||
String name = Math.abs(new Random().nextInt())
|
||||
String changedTest = classToTest
|
||||
.replace("public class Test {", "public class Test${name} {\njavax.ws.rs.client.WebTarget webTarget;\n")
|
||||
.replace("public class ContractsTest {", "public class Test${name} {\njavax.ws.rs.client.WebTarget webTarget;\n")
|
||||
.replace('public class Test {', "public class Test${name} {\njavax.ws.rs.client.WebTarget webTarget;\n")
|
||||
.replace('public class ContractsTest {', "public class Test${name} {\njavax.ws.rs.client.WebTarget webTarget;\n")
|
||||
String fqn = FQN(classToTest)
|
||||
SyntaxChecker.tryToCompileJavaWithoutImports("${fqn}${name}", changedTest)
|
||||
}
|
||||
@@ -112,11 +145,11 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
|
||||
def setup() {
|
||||
file = tmpFolder.newFile()
|
||||
wiriteContract(file)
|
||||
writeContract(file)
|
||||
}
|
||||
|
||||
private wiriteContract(File file) {
|
||||
file.write("""
|
||||
private writeContract(File file) {
|
||||
file.write('''
|
||||
org.springframework.cloud.contract.spec.Contract.make {
|
||||
request {
|
||||
method 'PUT'
|
||||
@@ -126,70 +159,72 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
status OK()
|
||||
}
|
||||
}
|
||||
""")
|
||||
''')
|
||||
}
|
||||
|
||||
def "should build test class for #testFramework"() {
|
||||
def 'should build test class for #testFramework'() {
|
||||
given:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties()
|
||||
properties.targetFramework = testFramework
|
||||
properties.testMode = mode
|
||||
ContractMetadata contract = new ContractMetadata(file.toPath(), true, 1, 2, convertAsCollection(new File("/"),file))
|
||||
ContractMetadata contract = new ContractMetadata(file.toPath(), true, 1, order, convertAsCollection(new File('/'), file))
|
||||
contract.ignored >> true
|
||||
contract.order >> 2
|
||||
JavaTestGenerator testGenerator = new JavaTestGenerator()
|
||||
|
||||
when:
|
||||
String clazz = testGenerator.buildClass(properties, [contract], "test", "test", 'com/foo')
|
||||
String clazz = testGenerator.buildClass(properties, [contract], 'test', 'test', 'com/foo')
|
||||
|
||||
then:
|
||||
classStrings.each { assert clazz.contains(it) }
|
||||
and:
|
||||
asserter(clazz)
|
||||
where:
|
||||
testFramework | mode | classStrings | asserter
|
||||
JUNIT | TestMode.MOCKMVC | mockMvcJUnitRestAssured3ClassStrings | JAVA_ASSERTER
|
||||
JUNIT | TestMode.EXPLICIT | explicitJUnitRestAssured3ClassStrings | JAVA_ASSERTER
|
||||
SPOCK | TestMode.MOCKMVC | spockClassRestAssured3Strings | GROOVY_ASSERTER
|
||||
SPOCK | TestMode.EXPLICIT | explicitSpockRestAssured3ClassStrings | GROOVY_ASSERTER
|
||||
testFramework | order | mode | classStrings | asserter
|
||||
JUNIT | 2 | MOCKMVC | mockMvcJUnitRestAssured3ClassStrings | JAVA_ASSERTER
|
||||
JUNIT | 2 | TestMode.EXPLICIT | explicitJUnitRestAssured3ClassStrings | JAVA_ASSERTER
|
||||
JUNIT5 | null | MOCKMVC | mockMvcJUnit5RestAssured3ClassStrings | JAVA_ASSERTER
|
||||
JUNIT5 | null | TestMode.EXPLICIT | explicitJUnit5RestAssured3ClassStrings | JAVA_ASSERTER
|
||||
SPOCK | 2 | MOCKMVC | spockClassRestAssured3Strings | GROOVY_ASSERTER
|
||||
SPOCK | 2 | TestMode.EXPLICIT | explicitSpockRestAssured3ClassStrings | GROOVY_ASSERTER
|
||||
}
|
||||
|
||||
def "should build test class for #testFramework when the path contains bizarre signs"() {
|
||||
def 'should build test class for #testFramework when the path contains bizarre signs'() {
|
||||
given:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties()
|
||||
properties.targetFramework = testFramework
|
||||
properties.basePackageForTests = "org.springframework.cloud.contract.verifier.tests"
|
||||
properties.basePackageForTests = 'org.springframework.cloud.contract.verifier.tests'
|
||||
and:
|
||||
File newFolder = tmpFolder.newFolder("META_INF")
|
||||
File subfolders = new File(newFolder, "/com.uscm/dale_api44_spec/0.1.0_dev.1.uncommitted+d1174dd/contracts/")
|
||||
File newFolder = tmpFolder.newFolder('META_INF')
|
||||
File subfolders = new File(newFolder, '/com.uscm/dale_api44_spec/0.1.0_dev.1.uncommitted+d1174dd/contracts/')
|
||||
subfolders.mkdirs()
|
||||
File newFile = new File(subfolders, "contract.groovy")
|
||||
File newFile = new File(subfolders, 'contract.groovy')
|
||||
newFile.createNewFile()
|
||||
wiriteContract(newFile)
|
||||
writeContract(newFile)
|
||||
properties.contractsDslDir = newFolder
|
||||
properties.generatedTestSourcesDir = newFolder.parentFile
|
||||
when:
|
||||
int size = new TestGenerator(properties).generate()
|
||||
then:
|
||||
size > 0
|
||||
asserter(new File(newFolder.parent, "/org/springframework/cloud/contract/verifier/tests/com_uscm/dale_api44_spec/0_1_0_dev_1_uncommitted_d1174dd/${testName}").text)
|
||||
asserter(new File(newFolder.parent, '/org/springframework/cloud/contract/verifier/tests/com_uscm/dale_api44_spec/0_1_0_dev_1_uncommitted_d1174dd/' + testName).text)
|
||||
where:
|
||||
testFramework | mode | asserter | testName
|
||||
JUNIT | TestMode.MOCKMVC | JAVA_ASSERTER | "ContractsTest.java"
|
||||
JUNIT | TestMode.EXPLICIT | JAVA_ASSERTER | "ContractsTest.java"
|
||||
SPOCK | TestMode.MOCKMVC | GROOVY_ASSERTER | "ContractsSpec.groovy"
|
||||
SPOCK | TestMode.EXPLICIT | GROOVY_ASSERTER | "ContractsSpec.groovy"
|
||||
JUNIT | MOCKMVC | JAVA_ASSERTER | 'ContractsTest.java'
|
||||
JUNIT | TestMode.EXPLICIT | JAVA_ASSERTER | 'ContractsTest.java'
|
||||
JUNIT5 | MOCKMVC | JAVA_ASSERTER | 'ContractsTest.java'
|
||||
JUNIT5 | TestMode.EXPLICIT | JAVA_ASSERTER | 'ContractsTest.java'
|
||||
SPOCK | MOCKMVC | GROOVY_ASSERTER | 'ContractsSpec.groovy'
|
||||
SPOCK | TestMode.EXPLICIT | GROOVY_ASSERTER | 'ContractsSpec.groovy'
|
||||
}
|
||||
|
||||
def "should build test class for #testFramework with Rest Assured 2.x"() {
|
||||
def 'should build test class for #testFramework with Rest Assured 2.x'() {
|
||||
given:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties()
|
||||
properties.targetFramework = testFramework
|
||||
properties.testMode = mode
|
||||
ContractMetadata contract = new ContractMetadata(file.toPath(), true, 1, 2,
|
||||
convertAsCollection(new File("/"),file) )
|
||||
ContractMetadata contract = new ContractMetadata(file.toPath(), true, 1, order,
|
||||
convertAsCollection(new File('/'), file))
|
||||
contract.ignored >> true
|
||||
contract.order >> 2
|
||||
JavaTestGenerator testGenerator = new JavaTestGenerator(checker: new ClassPresenceChecker() {
|
||||
@Override
|
||||
boolean isClassPresent(String className) {
|
||||
@@ -198,25 +233,27 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
})
|
||||
|
||||
when:
|
||||
String clazz = testGenerator.buildClass(properties, [contract], "test", "test", 'com/foo')
|
||||
String clazz = testGenerator.buildClass(properties, [contract], 'test', 'test', 'com/foo')
|
||||
|
||||
then:
|
||||
classStrings.each { assert clazz.contains(it) }
|
||||
clazz.contains("com.jayway.restassured")
|
||||
!clazz.contains("io.restassured")
|
||||
clazz.contains('com.jayway.restassured')
|
||||
!clazz.contains('io.restassured')
|
||||
|
||||
where:
|
||||
testFramework | mode | classStrings
|
||||
JUNIT | TestMode.MOCKMVC | mockMvcJUnitRestAssured2ClassStrings
|
||||
JUNIT | TestMode.EXPLICIT | explicitJUnitRestAssured2ClassStrings
|
||||
SPOCK | TestMode.MOCKMVC | spockClassRestAssured2Strings
|
||||
SPOCK | TestMode.EXPLICIT | explicitSpockRestAssured2ClassStrings
|
||||
testFramework | order | mode | classStrings
|
||||
JUNIT | 2 | MOCKMVC | mockMvcJUnitRestAssured2ClassStrings
|
||||
JUNIT | 2 | TestMode.EXPLICIT | explicitJUnitRestAssured2ClassStrings
|
||||
JUNIT5 | null | MOCKMVC | mockMvcJUnit5RestAssured2ClassStrings
|
||||
JUNIT5 | null | TestMode.EXPLICIT | explicitJUnit5RestAssured2ClassStrings
|
||||
SPOCK | 2 | MOCKMVC | spockClassRestAssured2Strings
|
||||
SPOCK | 2 | TestMode.EXPLICIT | explicitSpockRestAssured2ClassStrings
|
||||
}
|
||||
|
||||
def "should build test class for #testFramework and mode #mode with two files"() {
|
||||
def 'should build test class for #testFramework and mode #mode with two files'() {
|
||||
given:
|
||||
File file = tmpFolder.newFile()
|
||||
file.write("""
|
||||
file.write('''
|
||||
org.springframework.cloud.contract.spec.Contract.make {
|
||||
request {
|
||||
method 'PUT'
|
||||
@@ -233,10 +270,10 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
}
|
||||
}
|
||||
}
|
||||
""")
|
||||
''')
|
||||
and:
|
||||
File file2 = tmpFolder.newFile()
|
||||
file2.write("""
|
||||
file2.write('''
|
||||
org.springframework.cloud.contract.spec.Contract.make {
|
||||
request {
|
||||
method 'PUT'
|
||||
@@ -253,22 +290,22 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
}
|
||||
}
|
||||
}
|
||||
""")
|
||||
''')
|
||||
and:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties()
|
||||
properties.targetFramework = testFramework
|
||||
ContractMetadata contract = new ContractMetadata(file.toPath(), false, 1, null,
|
||||
convertAsCollection(new File("/"),file) )
|
||||
convertAsCollection(new File('/'), file))
|
||||
contract.ignored >> false
|
||||
and:
|
||||
ContractMetadata contract2 = new ContractMetadata(file2.toPath(), false, 1, null,
|
||||
convertAsCollection(new File("/"),file2) )
|
||||
convertAsCollection(new File('/'), file2))
|
||||
contract2.ignored >> false
|
||||
and:
|
||||
JavaTestGenerator testGenerator = new JavaTestGenerator()
|
||||
|
||||
when:
|
||||
String clazz = testGenerator.buildClass(properties, [contract, contract2], "test", "test", 'com/foo')
|
||||
String clazz = testGenerator.buildClass(properties, [contract, contract2], 'test', 'test', 'com/foo')
|
||||
|
||||
then:
|
||||
classStrings.each { clazz.contains(it) }
|
||||
@@ -277,25 +314,26 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
and:
|
||||
textAssertion(clazz)
|
||||
where:
|
||||
testFramework | mode | classStrings | asserter | textAssertion
|
||||
JUNIT | TestMode.MOCKMVC | mockMvcJUnitRestAssured3ClassStrings | JAVA_ASSERTER | { String test -> StringUtils.countOccurrencesOf(test, "\t\t\tMockMvcRequestSpecification") == 2 }
|
||||
JUNIT | TestMode.EXPLICIT | explicitJUnitRestAssured3ClassStrings | JAVA_ASSERTER | { String test -> StringUtils.countOccurrencesOf(test, "\t\t\tMockMvcRequestSpecification") == 2 }
|
||||
SPOCK | TestMode.MOCKMVC | spockClassRestAssured3Strings | GROOVY_ASSERTER | { String test -> StringUtils.countOccurrencesOf(test, "\t\t\tdef request") == 2 }
|
||||
SPOCK | TestMode.EXPLICIT | explicitSpockRestAssured2ClassStrings | GROOVY_ASSERTER | { String test -> StringUtils.countOccurrencesOf(test, "\t\t\tdef request") == 2 }
|
||||
testFramework | mode | classStrings | asserter | textAssertion
|
||||
JUNIT | MOCKMVC | mockMvcJUnitRestAssured3ClassStrings | JAVA_ASSERTER | {String test -> StringUtils.countOccurrencesOf(test, '\t\t\tMockMvcRequestSpecification') == 2}
|
||||
JUNIT | TestMode.EXPLICIT | explicitJUnitRestAssured3ClassStrings | JAVA_ASSERTER | {String test -> StringUtils.countOccurrencesOf(test, '\t\t\tMockMvcRequestSpecification') == 2}
|
||||
JUNIT5 | MOCKMVC | mockMvcJUnit5RestAssured3ClassStrings | JAVA_ASSERTER | {String test -> StringUtils.countOccurrencesOf(test, '\t\t\tMockMvcRequestSpecification') == 2}
|
||||
JUNIT5 | TestMode.EXPLICIT | explicitJUnit5RestAssured3ClassStrings | JAVA_ASSERTER | {String test -> StringUtils.countOccurrencesOf(test, '\t\t\tMockMvcRequestSpecification') == 2}
|
||||
SPOCK | MOCKMVC | spockClassRestAssured3Strings | GROOVY_ASSERTER | {String test -> StringUtils.countOccurrencesOf(test, '\t\t\tdef request') == 2}
|
||||
SPOCK | TestMode.EXPLICIT | explicitSpockRestAssured2ClassStrings | GROOVY_ASSERTER | {String test -> StringUtils.countOccurrencesOf(test, '\t\t\tdef request') == 2}
|
||||
}
|
||||
|
||||
def "should build JaxRs test class for #testFramework"() {
|
||||
def 'should build JaxRs test class for #testFramework'() {
|
||||
given:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties()
|
||||
properties.testMode = TestMode.JAXRSCLIENT
|
||||
properties.targetFramework = testFramework
|
||||
ContractMetadata contract = new ContractMetadata(file.toPath(), true, 1, 2, convertAsCollection(new File("/"),file))
|
||||
ContractMetadata contract = new ContractMetadata(file.toPath(), true, 1, null, convertAsCollection(new File('/'), file))
|
||||
contract.ignored >> true
|
||||
contract.order >> 2
|
||||
JavaTestGenerator testGenerator = new JavaTestGenerator()
|
||||
|
||||
when:
|
||||
String clazz = testGenerator.buildClass(properties, [contract], "test", "test", 'com/foo')
|
||||
String clazz = testGenerator.buildClass(properties, [contract], 'test', 'test', 'com/foo')
|
||||
|
||||
then:
|
||||
classStrings.each { clazz.contains(it) }
|
||||
@@ -304,15 +342,16 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
asserter(clazz)
|
||||
|
||||
where:
|
||||
testFramework | classStrings | asserter
|
||||
JUNIT | ['import static javax.ws.rs.client.Entity.*', 'import javax.ws.rs.core.Response'] | JAVA_JAXRS_ASSERTER
|
||||
SPOCK | ['import static javax.ws.rs.client.Entity.*'] | GROOVY_ASSERTER
|
||||
testFramework | classStrings | asserter
|
||||
JUNIT | ['import static javax.ws.rs.client.Entity.*', 'import javax.ws.rs.core.Response'] | JAVA_JAXRS_ASSERTER
|
||||
JUNIT5 | ['import static javax.ws.rs.client.Entity.*', 'import javax.ws.rs.core.Response'] | JAVA_JAXRS_ASSERTER
|
||||
SPOCK | ['import static javax.ws.rs.client.Entity.*'] | GROOVY_ASSERTER
|
||||
}
|
||||
|
||||
def "should work if there is messaging and rest in one folder #testFramework"() {
|
||||
def 'should work if there is messaging and rest in one folder #testFramework'() {
|
||||
given:
|
||||
File secondFile = tmpFolder.newFile()
|
||||
secondFile.write("""
|
||||
secondFile.write('''
|
||||
org.springframework.cloud.contract.spec.Contract.make {
|
||||
ignored()
|
||||
label 'some_label'
|
||||
@@ -327,22 +366,20 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
assertThat('hashCode()')
|
||||
}
|
||||
}
|
||||
""")
|
||||
''')
|
||||
and:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties()
|
||||
properties.targetFramework = testFramework
|
||||
ContractMetadata contract = new ContractMetadata(file.toPath(), true, 1, 2, convertAsCollection(new File("/"),file))
|
||||
ContractMetadata contract = new ContractMetadata(file.toPath(), true, 1, order, convertAsCollection(new File('/'), file))
|
||||
contract.ignored >> true
|
||||
contract.order >> 2
|
||||
and:
|
||||
ContractMetadata contract2 = new ContractMetadata(secondFile.toPath(), true, 1, 2, convertAsCollection(new File("/"),secondFile))
|
||||
ContractMetadata contract2 = new ContractMetadata(secondFile.toPath(), true, 1, order, convertAsCollection(new File('/'), secondFile))
|
||||
contract2.ignored >> true
|
||||
contract2.order >> 2
|
||||
and:
|
||||
JavaTestGenerator testGenerator = new JavaTestGenerator()
|
||||
|
||||
when:
|
||||
String clazz = testGenerator.buildClass(properties, [contract, contract2], "test", "test", 'com/foo')
|
||||
String clazz = testGenerator.buildClass(properties, [contract, contract2], 'test', 'test', 'com/foo')
|
||||
|
||||
then:
|
||||
classStrings.each { clazz.contains(it) }
|
||||
@@ -352,16 +389,17 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
asserter(clazz)
|
||||
|
||||
where:
|
||||
testFramework | classStrings | asserter
|
||||
JUNIT | mockMvcJUnitRestAssured3ClassStrings | JAVA_ASSERTER
|
||||
SPOCK | spockClassRestAssured3Strings | GROOVY_ASSERTER
|
||||
testFramework | order | classStrings | asserter
|
||||
JUNIT | 2 | mockMvcJUnitRestAssured3ClassStrings | JAVA_ASSERTER
|
||||
JUNIT5 | null | mockMvcJUnit5RestAssured3ClassStrings | JAVA_ASSERTER
|
||||
SPOCK | 2 | spockClassRestAssured3Strings | GROOVY_ASSERTER
|
||||
}
|
||||
|
||||
@Issue('#30')
|
||||
def "should ignore a test if the contract is ignored in the dsl"() {
|
||||
def 'should ignore a test if the contract is ignored in the dsl'() {
|
||||
given:
|
||||
File secondFile = tmpFolder.newFile()
|
||||
secondFile.write("""
|
||||
secondFile.write('''
|
||||
org.springframework.cloud.contract.spec.Contract.make {
|
||||
ignored()
|
||||
request {
|
||||
@@ -372,37 +410,37 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
status OK()
|
||||
}
|
||||
}
|
||||
""")
|
||||
''')
|
||||
and:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties()
|
||||
properties.targetFramework = testFramework
|
||||
and:
|
||||
ContractMetadata contract2 = new ContractMetadata(secondFile.toPath(), true, 1, 2, convertAsCollection(new File("/"),file))
|
||||
ContractMetadata contract2 = new ContractMetadata(secondFile.toPath(), true, 1, order, convertAsCollection(new File('/'), file))
|
||||
contract2.ignored >> false
|
||||
contract2.order >> 2
|
||||
and:
|
||||
JavaTestGenerator testGenerator = new JavaTestGenerator()
|
||||
|
||||
when:
|
||||
String clazz = testGenerator.buildClass(properties, [contract2], "test", "test", 'com/foo')
|
||||
String clazz = testGenerator.buildClass(properties, [contract2], 'test', 'test', 'com/foo')
|
||||
|
||||
then:
|
||||
classStrings.each { clazz.contains(it) }
|
||||
clazz.contains('@Ignore')
|
||||
clazz.contains(ignoreAnnotation)
|
||||
|
||||
and:
|
||||
asserter(clazz)
|
||||
|
||||
where:
|
||||
testFramework | classStrings | asserter
|
||||
JUNIT | mockMvcJUnitRestAssured3ClassStrings | JAVA_ASSERTER
|
||||
SPOCK | spockClassRestAssured3Strings | GROOVY_ASSERTER
|
||||
testFramework | order | classStrings | ignoreAnnotation | asserter
|
||||
JUNIT | 2 | mockMvcJUnitRestAssured3ClassStrings | '@Ignore' | JAVA_ASSERTER
|
||||
JUNIT5 | null | mockMvcJUnit5RestAssured3ClassStrings | '@Disabled' | JAVA_ASSERTER
|
||||
SPOCK | 2 | spockClassRestAssured3Strings | '@Ignore' | GROOVY_ASSERTER
|
||||
}
|
||||
|
||||
@Issue('#117')
|
||||
def "should generate test in explicit test mode using JUnit"() {
|
||||
def 'should generate test in explicit test mode using JUnit'() {
|
||||
given:
|
||||
String baseClass = """
|
||||
String baseClass = '''
|
||||
// tag::context_path_baseclass[]
|
||||
import io.restassured.RestAssured;
|
||||
import org.junit.Before;
|
||||
@@ -421,11 +459,11 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
}
|
||||
}
|
||||
// end::context_path_baseclass[]
|
||||
"""
|
||||
SyntaxChecker.tryToCompileJavaWithoutImports("test.ContextPathTestingBaseClass", "package test;\n${baseClass}")
|
||||
'''
|
||||
SyntaxChecker.tryToCompileJavaWithoutImports('test.ContextPathTestingBaseClass', "package test;\n${baseClass}")
|
||||
and:
|
||||
File secondFile = tmpFolder.newFile()
|
||||
secondFile.write("""
|
||||
secondFile.write('''
|
||||
// tag::context_path_contract[]
|
||||
org.springframework.cloud.contract.spec.Contract.make {
|
||||
request {
|
||||
@@ -437,28 +475,28 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
}
|
||||
}
|
||||
// end::context_path_contract[]
|
||||
""")
|
||||
''')
|
||||
and:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties()
|
||||
properties.targetFramework = JUNIT
|
||||
properties.testMode = TestMode.EXPLICIT
|
||||
properties.baseClassForTests = "test.ContextPathTestingBaseClass"
|
||||
properties.baseClassForTests = 'test.ContextPathTestingBaseClass'
|
||||
and:
|
||||
ContractMetadata contract = new ContractMetadata(file.toPath(), false, 1,
|
||||
null, convertAsCollection(new File("/"),file))
|
||||
null, convertAsCollection(new File('/'), file))
|
||||
and:
|
||||
SingleTestGenerator testGenerator = new JavaTestGenerator()
|
||||
when:
|
||||
String clazz = testGenerator.buildClass(properties, [contract], "test", "test", 'com/foo')
|
||||
String clazz = testGenerator.buildClass(properties, [contract], 'test', 'test', 'com/foo')
|
||||
then:
|
||||
clazz.contains("RequestSpecification request = given();")
|
||||
clazz.contains("Response response = given().spec(request)")
|
||||
clazz.contains('RequestSpecification request = given();')
|
||||
clazz.contains('Response response = given().spec(request)')
|
||||
}
|
||||
|
||||
def "should pick the contract's name as the test method"() {
|
||||
given:
|
||||
File secondFile = tmpFolder.newFile()
|
||||
secondFile.write("""
|
||||
secondFile.write('''
|
||||
org.springframework.cloud.contract.spec.Contract.make {
|
||||
name("MySuperMethod")
|
||||
request {
|
||||
@@ -469,18 +507,18 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
status OK()
|
||||
}
|
||||
}
|
||||
""")
|
||||
''')
|
||||
and:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties();
|
||||
properties.targetFramework = testFramework
|
||||
ContractMetadata contract = new ContractMetadata(secondFile.toPath(), false, 1, null, convertAsCollection(new File("/"),secondFile))
|
||||
ContractMetadata contract = new ContractMetadata(secondFile.toPath(), false, 1, null, convertAsCollection(new File('/'), secondFile))
|
||||
JavaTestGenerator testGenerator = new JavaTestGenerator()
|
||||
when:
|
||||
String clazz = testGenerator.buildClass(properties, [contract], "test", "test", 'com/foo')
|
||||
String clazz = testGenerator.buildClass(properties, [contract], 'test', 'test', 'com/foo')
|
||||
then:
|
||||
clazz.contains("validate_mySuperMethod()")
|
||||
clazz.contains('validate_mySuperMethod()')
|
||||
where:
|
||||
testFramework << [JUNIT, SPOCK]
|
||||
testFramework << [JUNIT, JUNIT5, SPOCK]
|
||||
}
|
||||
|
||||
def "should pick the contract's name as the test method when there are multiple contracts"() {
|
||||
@@ -505,18 +543,18 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
and:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties();
|
||||
properties.targetFramework = testFramework
|
||||
ContractMetadata contract = new ContractMetadata(secondFile.toPath(), false, 1, null, convertAsCollection(new File("/"),secondFile))
|
||||
ContractMetadata contract = new ContractMetadata(secondFile.toPath(), false, 1, null, convertAsCollection(new File('/'), secondFile))
|
||||
JavaTestGenerator testGenerator = new JavaTestGenerator()
|
||||
when:
|
||||
String clazz = testGenerator.buildClass(properties, [contract], "test", "test", 'com/foo')
|
||||
String clazz = testGenerator.buildClass(properties, [contract], 'test', 'test', 'com/foo')
|
||||
then:
|
||||
clazz.contains("validate_shouldHaveIndex1()")
|
||||
clazz.contains("validate_shouldHaveIndex2()")
|
||||
clazz.contains('validate_shouldHaveIndex1()')
|
||||
clazz.contains('validate_shouldHaveIndex2()')
|
||||
where:
|
||||
testFramework << [JUNIT, SPOCK]
|
||||
testFramework << [JUNIT, JUNIT5, SPOCK]
|
||||
}
|
||||
|
||||
def "should generate the test method when there are multiple contracts without name field"() {
|
||||
def 'should generate the test method when there are multiple contracts without name field'() {
|
||||
given:
|
||||
File secondFile = tmpFolder.newFile()
|
||||
secondFile.write('''
|
||||
@@ -537,26 +575,26 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
and:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties();
|
||||
properties.targetFramework = testFramework
|
||||
ContractMetadata contract = new ContractMetadata(secondFile.toPath(), false, 1, null, convertAsCollection(new File("/"),secondFile))
|
||||
ContractMetadata contract = new ContractMetadata(secondFile.toPath(), false, 1, null, convertAsCollection(new File('/'), secondFile))
|
||||
JavaTestGenerator testGenerator = new JavaTestGenerator()
|
||||
when:
|
||||
String clazz = testGenerator.buildClass(properties, [contract], "test", "test", 'com/foo')
|
||||
String clazz = testGenerator.buildClass(properties, [contract], 'test', 'test', 'com/foo')
|
||||
then:
|
||||
clazz.contains("_0() throws Exception")
|
||||
clazz.contains("_1() throws Exception")
|
||||
clazz.contains('_0() throws Exception')
|
||||
clazz.contains('_1() throws Exception')
|
||||
where:
|
||||
testFramework << [JUNIT, SPOCK]
|
||||
testFramework << [JUNIT, JUNIT5, SPOCK]
|
||||
}
|
||||
|
||||
@Issue("#359")
|
||||
def "should generate tests from a contract that references a file for [#testFramework]"() {
|
||||
@Issue('#359')
|
||||
def 'should generate tests from a contract that references a file for [#testFramework]'() {
|
||||
given:
|
||||
File contractLocation = new File(SingleTestGeneratorSpec.class.getResource("/classpath/readFromFile.groovy").toURI())
|
||||
File contractLocation = new File(SingleTestGeneratorSpec.class.getResource('/classpath/readFromFile.groovy').toURI())
|
||||
File temp = tmpFolder.newFolder()
|
||||
and:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties(
|
||||
targetFramework: testFramework, contractsDslDir: contractLocation.parentFile,
|
||||
basePackageForTests: "a.b",
|
||||
basePackageForTests: 'a.b',
|
||||
generatedTestSourcesDir: temp
|
||||
)
|
||||
TestGenerator testGenerator = new TestGenerator(properties)
|
||||
@@ -565,22 +603,22 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
then:
|
||||
count == 1
|
||||
and:
|
||||
String test = new File(temp, "a/b/ContractVerifier" + (testFramework == JUNIT ? "Test.java" : "Spec.groovy")).text
|
||||
test.contains("REQUEST")
|
||||
test.contains("RESPONSE")
|
||||
String test = new File(temp, "a/b/ContractVerifier${getTestName(testFramework)}").text
|
||||
test.contains('REQUEST')
|
||||
test.contains('RESPONSE')
|
||||
where:
|
||||
testFramework << [JUNIT, SPOCK]
|
||||
testFramework << [JUNIT, JUNIT5, SPOCK]
|
||||
}
|
||||
|
||||
@Issue("#260")
|
||||
def "should generate tests in a folder taken from basePackageForTests when it is set for [#testFramework]"() {
|
||||
@Issue('#260')
|
||||
def 'should generate tests in a folder taken from basePackageForTests when it is set for [#testFramework]'() {
|
||||
given:
|
||||
File contractLocation = new File(SingleTestGeneratorSpec.class.getResource("/classpath/readFromFile.groovy").toURI())
|
||||
File contractLocation = new File(SingleTestGeneratorSpec.class.getResource('/classpath/readFromFile.groovy').toURI())
|
||||
File temp = tmpFolder.newFolder()
|
||||
and:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties(
|
||||
targetFramework: testFramework, contractsDslDir: contractLocation.parentFile,
|
||||
basePackageForTests: "a.b", generatedTestSourcesDir: temp
|
||||
basePackageForTests: 'a.b', generatedTestSourcesDir: temp
|
||||
)
|
||||
TestGenerator testGenerator = new TestGenerator(properties)
|
||||
when:
|
||||
@@ -588,22 +626,22 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
then:
|
||||
count == 1
|
||||
and:
|
||||
String test = new File(temp, "a/b/ContractVerifier" + (testFramework == JUNIT ? "Test.java" : "Spec.groovy")).text
|
||||
test.contains("REQUEST")
|
||||
test.contains("RESPONSE")
|
||||
String test = new File(temp, "a/b/ContractVerifier${getTestName(testFramework)}").text
|
||||
test.contains('REQUEST')
|
||||
test.contains('RESPONSE')
|
||||
where:
|
||||
testFramework << [JUNIT, SPOCK]
|
||||
testFramework << [JUNIT, JUNIT5, SPOCK]
|
||||
}
|
||||
|
||||
@Issue("#260")
|
||||
@Issue('#260')
|
||||
def "should generate tests in a folder taken from baseClassForTests's package when it is set for [#testFramework]"() {
|
||||
given:
|
||||
File contractLocation = new File(SingleTestGeneratorSpec.class.getResource("/classpath/readFromFile.groovy").toURI())
|
||||
File contractLocation = new File(SingleTestGeneratorSpec.class.getResource('/classpath/readFromFile.groovy').toURI())
|
||||
File temp = tmpFolder.newFolder()
|
||||
and:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties(
|
||||
targetFramework: testFramework, contractsDslDir: contractLocation.parentFile,
|
||||
baseClassForTests: "a.b.SomeClass", generatedTestSourcesDir: temp
|
||||
baseClassForTests: 'a.b.SomeClass', generatedTestSourcesDir: temp
|
||||
)
|
||||
TestGenerator testGenerator = new TestGenerator(properties)
|
||||
when:
|
||||
@@ -611,22 +649,22 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
then:
|
||||
count == 1
|
||||
and:
|
||||
String test = new File(temp, "a/b/ContractVerifier" + (testFramework == JUNIT ? "Test.java" : "Spec.groovy")).text
|
||||
test.contains("REQUEST")
|
||||
test.contains("RESPONSE")
|
||||
String test = new File(temp, "a/b/ContractVerifier${getTestName(testFramework)}").text
|
||||
test.contains('REQUEST')
|
||||
test.contains('RESPONSE')
|
||||
where:
|
||||
testFramework << [JUNIT, SPOCK]
|
||||
testFramework << [JUNIT, JUNIT5, SPOCK]
|
||||
}
|
||||
|
||||
@Issue("#260")
|
||||
def "should generate tests in a folder taken from packageWithBaseClasses when it is set for [#testFramework]"() {
|
||||
@Issue('#260')
|
||||
def 'should generate tests in a folder taken from packageWithBaseClasses when it is set for [#testFramework]'() {
|
||||
given:
|
||||
File contractLocation = new File(SingleTestGeneratorSpec.class.getResource("/classpath/readFromFile.groovy").toURI())
|
||||
File contractLocation = new File(SingleTestGeneratorSpec.class.getResource('/classpath/readFromFile.groovy').toURI())
|
||||
File temp = tmpFolder.newFolder()
|
||||
and:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties(
|
||||
targetFramework: testFramework, contractsDslDir: contractLocation.parentFile,
|
||||
packageWithBaseClasses: "a.b", generatedTestSourcesDir: temp
|
||||
packageWithBaseClasses: 'a.b', generatedTestSourcesDir: temp
|
||||
)
|
||||
TestGenerator testGenerator = new TestGenerator(properties)
|
||||
when:
|
||||
@@ -634,17 +672,17 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
then:
|
||||
count == 1
|
||||
and:
|
||||
String test = new File(temp, "a/b/ContractVerifier" + (testFramework == JUNIT ? "Test.java" : "Spec.groovy")).text
|
||||
test.contains("REQUEST")
|
||||
test.contains("RESPONSE")
|
||||
String test = new File(temp, "a/b/ContractVerifier${getTestName(testFramework)}").text
|
||||
test.contains('REQUEST')
|
||||
test.contains('RESPONSE')
|
||||
where:
|
||||
testFramework << [JUNIT, SPOCK]
|
||||
testFramework << [JUNIT, JUNIT5, SPOCK]
|
||||
}
|
||||
|
||||
@Issue("#260")
|
||||
def "should generate tests in a default folder when no property was passed for [#testFramework]"() {
|
||||
@Issue('#260')
|
||||
def 'should generate tests in a default folder when no property was passed for [#testFramework]'() {
|
||||
given:
|
||||
File contractLocation = new File(SingleTestGeneratorSpec.class.getResource("/classpath/readFromFile.groovy").toURI())
|
||||
File contractLocation = new File(SingleTestGeneratorSpec.class.getResource('/classpath/readFromFile.groovy').toURI())
|
||||
File temp = tmpFolder.newFolder()
|
||||
and:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties(
|
||||
@@ -657,14 +695,29 @@ class SingleTestGeneratorSpec extends Specification {
|
||||
then:
|
||||
count == 1
|
||||
and:
|
||||
String test = new File(temp, "org/springframework/cloud/contract/verifier/tests/ContractVerifier" + (testFramework == JUNIT ? "Test.java" : "Spec.groovy")).text
|
||||
test.contains("REQUEST")
|
||||
test.contains("RESPONSE")
|
||||
String test = new File(temp, "org/springframework/cloud/contract/verifier/tests/ContractVerifier${getTestName(testFramework)}").text
|
||||
test.contains('REQUEST')
|
||||
test.contains('RESPONSE')
|
||||
where:
|
||||
testFramework << [JUNIT, SPOCK]
|
||||
testFramework << [JUNIT, JUNIT5, SPOCK]
|
||||
}
|
||||
|
||||
def 'should throw exception in JUnit5 when contract belongs to scenario'() {
|
||||
given:
|
||||
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties()
|
||||
properties.targetFramework = JUNIT5
|
||||
properties.testMode = mode
|
||||
ContractMetadata contract = new ContractMetadata(file.toPath(), true, 1, 1, convertAsCollection(new File('/'), file))
|
||||
JavaTestGenerator testGenerator = new JavaTestGenerator()
|
||||
when:
|
||||
testGenerator.buildClass(properties, [contract], 'test', 'test', 'com/foo')
|
||||
then:
|
||||
thrown(UnsupportedOperationException)
|
||||
where:
|
||||
mode << [MOCKMVC, EXPLICIT, JAXRSCLIENT]
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static String getTestName(TestFramework testFramework) {
|
||||
testFramework == SPOCK ? 'Spec.groovy' : 'Test.java'
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user