spring-cloud-contract
spring-cloud-contract copied to clipboard
spring-cloud-contract:generateTests behaviour differs when generating class from local contracts vs remote (scm) ones
Describe the bug spring-cloud-contract:generateTests behaviour differs when generating class from local contracts vs remote (scm) ones.
When generated from local contracts (i.e. src/test/java/resources/contracts/item
):
- package of generated class is same as value of
packageWithBaseClasses
- name of base class used to extend test is same as my base class found in
packageWithBaseClasses
When generated from remote (SCM) contracts:
- package of generated class is
<packageWithBaseClasses>.contracts
- name of base class used to extend is
Contracts<myBaseClassName>
In general, when generated from SCM contracts, both names of package and extended class are enhanced with Contracts
string.
This is causing undeterministing behaviour - different result when testing locally and after switching to remote.
Sample Cloud Dependencies Version : Hoxton.RELEASE
- Local mode
> ls src/test/resources/contracts/item/
itemcontract.groovy
> ls src/test/java/com/mycompany/contract/producer/contracts/ItemBase.java
src/test/java/com/mycompany/contract/producer/contracts/ItemBase.java
>
Plugin configuration:
<plugin>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<testFramework>JUNIT5</testFramework>
<packageWithBaseClasses>com.mycompany.contract.producer.contracts</packageWithBaseClasses>
</configuration>
</plugin>
mvn -DskipTests clean install - OK mvn clean package - OK, test was generated and passed successfully
- Reconfigure to remote Plugin configuration:
<plugin>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<testFramework>JUNIT5</testFramework>
<packageWithBaseClasses>com.mycompany.contract.producer.contracts</packageWithBaseClasses>
<contractsRepositoryUrl>git://ssh://git@localhost:2222/git-server/repos/contractsrepo.git</contractsRepositoryUrl>
<contractDependency>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<version>${project.version}</version>
</contractDependency>
<contractsMode>REMOTE</contractsMode> -->
</configuration>
</plugin>
2.1 mvn spring-cloud-contract:pushStubsToScm - OK, stubs and contracts are pushed to SCM 2.2 mvn mvn clean package - NOT OK (can't find base class)
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /home/nick/devel/producer-app/target/generated-test-sources/contracts/com/mycompany/contract/producer/contracts/contracts/ItemTest.java:[3,54] cannot find symbol
symbol: class ContractsItemBase
location: package com.mycompany.contract.producer.contracts
Additionally, package of generated looks like:
> grep package target/generated-test-sources/contracts/com/mycompany/contract/producer/contracts/contracts/ItemTest.java
package com.mycompany.contract.producer.contracts.contracts;
>
(note .contracts.contracts)