Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用REST Assured进行测试时获取java.lang.AbstractMethodError_Java_Spring Boot_Maven_Junit_Rest Assured - Fatal编程技术网

使用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
测试
棒极了