使用REST Assured进行测试时获取java.lang.AbstractMethodError
我正在尝试使用使用REST Assured进行测试时获取java.lang.AbstractMethodError,java,spring-boot,maven,junit,rest-assured,Java,Spring Boot,Maven,Junit,Rest Assured,我正在尝试使用REST-Assured v4.3.0测试控制器类中定义的REST api,但在运行测试时得到java.lang.AbstractMethodError。我知道发生这个错误是因为我调用了一个抽象方法,但是我很难解决它 错误似乎是由于SampleControllerTest.java中的.body(is(equalTo(“success”))引起的,因为当我删除这一行时,测试成功了。我尝试了一些方法来解决它,但没有成功: 在线搜索建议和示例,但它们要么是针对较旧的版本,要么与io无
REST-Assured v4.3.0
测试控制器类中定义的REST api,但在运行测试时得到java.lang.AbstractMethodError
。我知道发生这个错误是因为我调用了一个抽象方法,但是我很难解决它
错误似乎是由于SampleControllerTest.java中的.body(is(equalTo(“success”))
引起的,因为当我删除这一行时,测试成功了。我尝试了一些方法来解决它,但没有成功:
- 在线搜索建议和示例,但它们要么是针对较旧的版本,要么与
io无关。请放心/spring-mock-mvc
- 尝试了不同的匹配器(
org.hamcrest.matchers.*
和org.hamcrest.CoreMatchers.*
)
- 尝试在pom文件中显式添加
org.hamcrest/hamcrest
依赖项
以下是我的代码供您参考:
代码结构:
test
|- src/
| |- main/
| | |- java/
| | | |- org/
| | | | |- example/
| | | | | |- Application.java
| | | | | |- SampleController.java
| |- test/
| | |- java/
| | | |- org/
| | | | |- example/
| | | | | |- SampleControllerTest.java
|- target/
|- pom.xml
Application.java
package org.example;
导入org.springframework.boot.SpringApplication;
导入org.springframework.boot.autoconfigure.springboot应用程序;
@SpringBoot应用程序
公共类应用程序{
公共静态void main(字符串[]args){
SpringApplication.run(Application.class,args);
}
}
SampleController.java
package org.example;
导入org.springframework.http.HttpStatus;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.ResponseStatus;
导入org.springframework.web.bind.annotation.RestController;
@RestController
公共类采样控制器{
@请求映射(value=“/sample”)
@ResponseStatus(值=HttpStatus.OK)
公共字符串getSample(){
返回“成功”;
}
}
SampleControllerTest.java
package org.example;
导入org.junit.Test;
导入静态io.restassured.module.mockmvc.restassuredmocmvc.*;
导入静态org.hamcrest.Matchers.*;
导入静态org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
公共类采样控制器测试{
@试验
public void testGetSample(){
给定()
.standaloneSetup(新的SampleController())
.when()
.get(“/sample”)
.然后()
.assertThat(status().isOk())
.body(is(equalTo(“success”));
}
}
pom.xml
4.0.0
罐子
org.springframework.boot
spring启动程序父级
2.2.1.发布
org.example
测试
1.0-快照
8.
org.example.Application
org.springframework.boot
SpringBootStarterWeb
朱尼特
朱尼特
4.12
测试
放心吧
spring模拟mvc
4.3.0
测试
放心吧
json路径
4.3.0
放心吧
xml路径
4.3.0
放心吧
放心
4.3.0
测试
org.springframework.boot
springbootmaven插件
当我使用mvn test
运行测试时,我得到的错误是:
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.325 s <<< FAILURE! - in org.example.SampleControllerTest
[ERROR] testGetSample(org.example.SampleControllerTest) Time elapsed: 1.288 s <<< ERROR!
java.lang.AbstractMethodError: Method io/restassured/internal/ResponseSpecificationImpl.getProperty(Ljava/lang/String;)Ljava/lang/Object; is abstract
at org.example.SampleControllerTest.testGetSample(SampleControllerTest.java:20)
[ERROR]测试运行:1,失败:0,错误:1,跳过:0,经过的时间:1.325秒在REST Assured 4.3.0中看起来像一个bug,您的代码适用于4.2.0版本
我没有找到打开的问题 结果是,io.rest-assured/spring-mock-mvc
依赖项与io.rest-assured/rest-assured
依赖项冲突。一旦我从pom.xml
中删除了io.rest-assured/rest-assured
,测试就成功了
几年前,当我使用REST-Assured版本3.1.1
时,我可以保留这两个依赖项,但可能新版本不允许这样做。我使用了4.2.0而不是4.3.0。。它对我有效我也有一个java.lang.AbstractMethodError
但是在另一个方法上
rest assured 4.3升级了它的实现以供使用,请参阅
在我的例子中,依赖项解析将groovy降级为使用一些2.x版本
如果您使用maven:
您可以使用mvn dependency:tree
检查这一点。
如果存在冲突,请将必要的groovy依赖项作为版本=>3.0.2的直接依赖项添加到项目中
如果您使用gradle:
您可以使用渐变相关性检查是否存在。
如果存在冲突,则添加解决策略:
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'org.codehaus.groovy') {
details.useVersion "3.0.2"
details.because "needed by rest-assured>=4.3"
}
}
}
也许这会对某些人有所帮助。因为rest assured 4.3.0将Groovy从2.5.7升级到3.0.2,请参见,您可以在pom文件中指定Groovy版本
4.3.0
3.0.2
在pom.xml中使用rest-assured的以下依赖项
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>
放心吧
放心
4.2.0
测试
如果您使用的是放心版4.3.2
,只需明确指定groovy版本为3.0.6
,即可修复错误
<rest-assured.version>4.3.2</rest-assured.version>
<groovy.version>3.0.6</groovy.version>
4.3.2
3.0.6
祝你好运。对于Maven项目,下面的代码可以很好地用于Spring Boot项目:
3.0.7
4.3.3
org.springframework.boot
弹簧靴起动器
org.springframework.boot
弹簧起动试验
测试
放心吧
spring模拟mvc
测试
棒极了