我正在尝试在 Spring 中创建合约(https://spring.io/projects/spring-cloud-contract)
这是我不断收到的错误:
测试错误:ContractVerifierTest.validate_shouldReturnPreviousAddress:19 » NoClassDefFound
这是导致问题的行:
// given:
MockMvcRequestSpecification request = given();
这是我的常规文件:
一揽子合同 导入 org.springframework.cloud.contract.spec.Contract 合约.make { 要求 { 方法“获取” url 值(消费者('/echo'), 生产者('/echo')) } 回复 { 状态 200 标头{ 标头( 'Content-Type', value(consumer('text/plain;charset=ISO-8859-1'), Producer(regex('text/plain;charset=ISO-8859-1'))) ) } 身体( “给我发点东西吧!” ) } 优先级 1 }
我已在我的 pom 文件中包含以下内容:
<build>
<plugins>
<plugin>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-maven-plugin</artifactId>
<version>1.2.2.RELEASE</version>
<extensions>true</extensions>
<configuration>
<baseClassForTests>[baseClass link]</baseClassForTests>
</configuration>
</plugin>
</plugins>
</build>
据我所知,导致此问题的线路是正确的。还有什么我可能会错过的吗?
编辑:
仔细检查后,这似乎是问题的真正原因:
java.lang.NoClassDefFoundError:io/restassured/internal/common/assertion/AssertParameter
java.lang.NoClassDefFoundError
出现上述错误通常是由于 Spring Cloud 和 Spring Boot 版本不匹配或依赖项过时造成的。
Spring Cloud 版本与特定的 Spring Boot 版本相关。可以参考Spring Cloud文档中的下表:
发布火车 Spring Boot 兼容性
释放列车 | 启动版本 |
---|---|
2021.0.x 又名 Jubilee | 2.6.x、2.7.x(从2021.0.3开始) |
2020.0.x 又名伊尔福德 | 2.4.x、2.5.x(2020.0.3开始) |
霍克斯顿 | 2.2.x、2.3.x(从 SR5 开始) |
格林威治 | 2.1.x |
芬奇利 | 2.0.x |
埃奇韦尔 | 1.5.x |
达尔斯顿 | 1.5.x |
注意:建议使用Spring开箱即用的
rest-assured
,以避免版本不匹配。