繁体   English   中英

生成的测试在Spring Cloud Contract中失败

[英]Generated tests fail in Spring Cloud Contract

我是春季云合同的新手。 只是尝试配置我的构建,而我得到了错误。

这是我的项目结构

项目
| ==>模块

我在我的项目build.gradle中具有以下对classpath的依赖关系

项目构建文件

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 ,会自动生成测试,但是我的感觉很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从外部库中引用了它。

因此,我确实使cache intellij无效,并关闭了所有不必要的项目,并在新窗口中(新会话)重新打开了我正在处理的项目。 现在gradle build ,再次在生成的测试中出现相同的错误。 但是这一次,当我在导入上按Ctrl + Hover(鼠标)时,它指向的是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;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM