首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在使用spring Contrac-OA3和spring插件时生成合同测试。

无法在使用spring Contrac-OA3和spring插件时生成合同测试。
EN

Stack Overflow用户
提问于 2022-05-31 14:13:30
回答 1查看 333关注 0票数 0

当我在OA3 yml文件中指定契约,然后构建项目时,构建会通过,但它不会生成契约测试。如果我用类似的groovy替换OA3 yml契约文件,那么构建就会通过,它将生成并运行契约测试。

我有以下设置:

  • com.github.mzielinski:spring-cloud-contract-oa3:3.1.2.0'
  • 'org.springframework.cloud:spring-cloud-contract-gradle-plugin:3.1.2'
  • 'org.springframework.cloud:spring-cloud-dependencies:2021.0.3'
  • gradle 7.3.2
  • java 8

我的build.gradle看起来像:

代码语言:javascript
复制
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'
}

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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在转换从该文件在两个地方生成的适当契约时遇到了问题(用于测试):

  • 消息:‘请求中提供的路径是:{ jsonpath此"$.path“}}。’
  • 正文: path:'/etc/passwd'

例如,在SPOCK中,生成的测试具有这样的代码

代码语言:javascript
复制
assertThatJson(parsedJson).field("['request']").isEqualTo("{"path":"/etc/passwd"}")

有无效的逃逸。生成契约

代码语言:javascript
复制
  body:
    path: "/etc/passwd"

所以看起来没问题。

我在生产中使用sscoa3,我还没有这样的问题,但我将尝试在SSC中修复YamlContract,以适当的方式转换它。

您也可以通过运行带有--调试标志的gradle build从YmlContract中看到堆栈跟踪。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72449425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档