当我在OA3 yml文件中指定契约,然后构建项目时,构建会通过,但它不会生成契约测试。如果我用类似的groovy替换OA3 yml契约文件,那么构建就会通过,它将生成并运行契约测试。
我有以下设置:
我的build.gradle看起来像:
buildscript {
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
classpath 'org.springframework.cloud:spring-cloud-contract-gradle-plugin:3.1.2'
classpath 'com.github.mzielinski:spring-cloud-contract-oa3:3.1.2.0'
}
}
plugins {
id 'org.springframework.boot' version '2.6.8'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'war'
id 'java-library'
id 'maven-publish'
id 'com.adarshr.test-logger' version '3.0.0'
id "org.unbroken-dome.test-sets" version "4.0.0"
id 'groovy'
}
apply plugin: 'spring-cloud-contract'
testSets {
contractTest
}
ext {
springBootStarterVersion = '2.6.8'
springCloudVersion = '2021.0.3'
projectLombokVersion = '1.18.24'
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
testImplementation unitTesting
testImplementation 'org.springframework.cloud:spring-cloud-starter-contract-verifier'
compileOnly "org.projectlombok:lombok:${projectLombokVersion}"
annotationProcessor "org.projectlombok:lombok:${projectLombokVersion}"
testAnnotationProcessor "org.projectlombok:lombok:${projectLombokVersion}"
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
test {
useJUnitPlatform()
}
contractTest {
useJUnitPlatform()
}
contracts {
testFramework = org.springframework.cloud.contract.verifier.config.TestFramework.JUNIT5
baseClassForTests = 'com.my.project.contract.BaseContractTest'
testMode = 'MockMvc'
contractsPath = 'src/contractTest/resources/contracts'
}
}发布于 2022-05-31 21:23:48
@Lamminski,我想,我能够复制你的问题。
第一个问题是'com.github.mzielinski:spring-cloud-contract-oa3:3.1.2.0‘in buildSrc。请把它移到testImplementation。然后,您应该能够在/tmp/sccoa3 3_..yml文件中看到生成的契约。
通常,SpringCloudContrac-OA3将/tmp目录中的open转换为yaml协议,然后使用这些文件从SSC生成带有YmlContract类的契约DSL。
此外,我还注意到,使用来自https://github.com/mzielinski/spring-cloud-contract-oa3/blob/develop/src/test/resources/openapi/verify_oa3.yml和build.gradle文件的示例,scc在转换从该文件在两个地方生成的适当契约时遇到了问题(用于测试):
例如,在SPOCK中,生成的测试具有这样的代码
assertThatJson(parsedJson).field("['request']").isEqualTo("{"path":"/etc/passwd"}")有无效的逃逸。生成契约
body:
path: "/etc/passwd"所以看起来没问题。
我在生产中使用sscoa3,我还没有这样的问题,但我将尝试在SSC中修复YamlContract,以适当的方式转换它。
您也可以通过运行带有--调试标志的gradle build从YmlContract中看到堆栈跟踪。
https://stackoverflow.com/questions/72449425
复制相似问题