gpt4 book ai didi

java - Spring Cloud Contract 中生成的测试失败

转载 作者:太空宇宙 更新时间:2023-11-04 11:11:09 25 4
gpt4 key购买 nike

我是 spring-cloud-contract 的新手。只是尝试配置我的构建,但出现错误。

这是我的项目结构

Project
| ==> Module

我的项目 build.gradle 中的类路径有以下依赖项

项目构建文件

buildscript {
dependencies {
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.2.1"
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.4.RELEASE")
classpath "org.springframework.cloud:spring-cloud-contract-gradle-plugin:1.1.3.RELEASE"
}
apply from: "$projectDir/gradle/app/springcloud.gradle" //Gradle build file in module
}

模块构建文件

apply plugin: 'groovy'
apply plugin: 'spring-cloud-contract'
apply plugin: 'org.springframework.boot'
dependencies {
//Spring cloud contract dependencies
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('org.springframework.cloud:spring-cloud-starter-contract-verifier')
testCompile "org.springframework.cloud:spring-cloud-starter-contract-stub-runner"
testCompile "com.jayway.restassured:rest-assured:2.5.0"
testCompile "com.jayway.restassured:spring-mock-mvc:2.5.0"
}
//Spring cloud contract dependency management
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:Dalston.RELEASE"
}
}

我有一个常规文件,其中包含发布请求和响应。当我执行 gradle build 时,测试是自动生成的,但我的构建感觉良好。

C:\Users\user\Projects\myProject\module\build\generated-test-sources\contracts\org\springframework\cloud\contract\verifier\tests\ContractVerifierTest.java:3: error: cannot find symbol
import com.jayway.jsonpath.DocumentContext;
^
symbol: class DocumentContext
location: package com.jayway.jsonpath

C:\Users\user\Projects\myProject\module\build\generated-test-sources\contracts\org\springframework\cloud\contract\verifier\tests\ContractVerifierTest.java:28: error: cannot find symbol
DocumentContext parsedJson =
JsonPath.parse(response.getBody().asString());
^

我做错了什么吗?我使用的版本是否存在不匹配的情况?

最佳答案

@Marcin 感谢您的投入。这就是我解决这个问题的方法。

构建在生成的测试中失败,并且 jayway jsonpath 在错误位置没有以红色显示。当我 Ctrl + 将鼠标悬停在导入上时,它引用的是 com.jayway.jsonpath:json-path:2.2.0 ,这是不正确的。原因是因为我在 Intellij 中导入了许多模块,显然其中一个模块也导入了 2.2.0 并且 intellij 正在从外部库引用它。

因此,我确实使缓存 intellij 无效,并关闭了所有不必要的项目,并在新窗口(新鲜 session )中单独重新打开了我正在处理的项目。现在 gradle build ,我在生成的测试中再次遇到相同的错误。但这一次,当我 Ctrl + 将鼠标悬停在导入上时,它引用了 com.jayway.jsonpath:json-path:0.9.1 这正是我所期望的。

现在为了解决这个问题,我使用以下命令检查了依赖关系树,并对其执行了一些 grep 操作。

allDeps --configuration testRuntime

我找到了答案,为什么 gradle 要用 0.9.1 替换 2.2.0。我发现一些项目依赖性正在取代它。现在的解决方案是修改 jayway json-path 的模块构建文件,如下所示。之后,我给出了 build gradle 命令,现在错误消失了。

testCompile ('com.jayway.jsonpath:json-path:2.2.0') {
force = true
}

最后,我遇到异常,说 SpringCloudContractAssertions 无法找到。

org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat;

因此,我将 Camden 版本替换为 Dalston,如下所示。现在一切正常。

dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:Dalston.RELEASE"
}
}

关于java - Spring Cloud Contract 中生成的测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45992063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com