Spring Cloud Contract中生成的测试失败

时间:2017-09-01 01:11:18

标签: java spring-boot spring-cloud-contract

我是Spring-cloud-contract的新手。只是尝试配置我的构建,我收到错误。

这是我的项目结构

  

项目
     | ==>模块

我的项目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"
  }
}

我有一个groovy文件,它有一个帖子请求和一个响应。当我做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());
        ^

我做错了吗?我正在使用的版本是否有任何不匹配?

1 个答案:

答案 0 :(得分:0)

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

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

所以我做了无效缓存intellij并关闭了所有不必要的项目,并在新窗口(Fresh会话)中重新打开了我正在处理的项目。现在gradle build并且我再次在生成的测试中得到了相同的错误。但是这次当我在导入时按Ctrl + Hover(鼠标)引用它com.jayway.jsonpath:json-path:0.9.1这就是我所期待的。

现在要解决这个问题,我已经使用下面的命令检查了依赖树,并在其上做了一些grep

allDeps --configuration testRuntime

我找到了答案,为什么gradle用2.2.0替换0.9.1。我发现一些项目依赖正在取代它。现在解决方法是修改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"
    }
}