pgn*_*ngp 14 java junit maven rest-assured spring-boot
我正在尝试使用 测试在我的控制器类中定义的 REST api REST Assured v4.3.0,但是我java.lang.AbstractMethodError在运行测试时得到了。我知道发生此错误是因为我正在调用一个抽象方法,但我很难解决它。
似乎错误是由于.body(is(equalTo("success")))in发生的,SampleControllerTest.java因为当我删除此行时,测试成功。我尝试了一些方法来解决它,但没有取得任何成功:
io.rest-assured/spring-mock-mvcorg.hamcrest.Matchers.*和org.hamcrest.CoreMatchers.*)org.hamcrest/hamcrest在 pom 文件中显式添加依赖项这是我的代码供您参考:
代码结构:
test
|- src/
| |- main/
| | |- java/
| | | |- org/
| | | | |- example/
| | | | | |- Application.java
| | | | | |- SampleController.java
| |- test/
| | |- java/
| | | |- org/
| | | | |- example/
| | | | | |- SampleControllerTest.java
|- target/
|- pom.xml
Run Code Online (Sandbox Code Playgroud)
应用程序.java
test
|- src/
| |- main/
| | |- java/
| | | |- org/
| | | | |- example/
| | | | | |- Application.java
| | | | | |- SampleController.java
| |- test/
| | |- java/
| | | |- org/
| | | | |- example/
| | | | | |- SampleControllerTest.java
|- target/
|- pom.xml
Run Code Online (Sandbox Code Playgroud)
示例控制器.java
package org.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
示例控制器测试.java
package org.example;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SampleController {
@RequestMapping(value = "/sample")
@ResponseStatus(value = HttpStatus.OK)
public String getSample() {
return "success";
}
}
Run Code Online (Sandbox Code Playgroud)
pom.xml
package org.example;
import org.junit.Test;
import static io.restassured.module.mockmvc.RestAssuredMockMvc.*;
import static org.hamcrest.Matchers.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
public class SampleControllerTest {
@Test
public void testGetSample() {
given()
.standaloneSetup(new SampleController())
.when()
.get("/sample")
.then()
.assertThat(status().isOk())
.body(is(equalTo("success")));
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用 运行测试时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)
Run Code Online (Sandbox Code Playgroud)
提前感谢您的任何帮助!
小智 15
因为rest-assured 4.3.0将Groovy从2.5.7升级到3.0.2,参见master·rest-assured/rest-assured的rest-assured/changelog.txt,可以在pom文件中指定groovy版本。
<properties>
<rest-assured.version>4.3.0</rest-assured.version>
<groovy.version>3.0.2</groovy.version>
</properties>
Run Code Online (Sandbox Code Playgroud)
它看起来像是 REST Assured 4.3.0 中的一个错误,您的代码适用于 4.2.0 版本。
我没有找到打开的问题。https://github.com/rest-assured/rest-assured/issues
小智 5
对于 Maven 项目,下面的代码适用于 Spring Boot 项目:
<properties>
<groovy.version>3.0.7</groovy.version>
<rest-assured.version>4.3.3</rest-assured.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>spring-mock-mvc</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>groovy</artifactId>
<groupId>org.codehaus.groovy</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>${groovy.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-xml</artifactId>
<version>${groovy.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-json</artifactId>
<version>${groovy.version}</version>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>${rest-assured.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>xml-path</artifactId>
<version>${rest-assured.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
```
Run Code Online (Sandbox Code Playgroud)
事实证明,io.rest-assured/spring-mock-mvc依赖与io.rest-assured/rest-assured依赖是冲突的。一旦我删除了io.rest-assured/rest-assuredfrom pom.xml,测试就成功了。
几年前,当我使用 REST Assured 版本时3.1.1,我可以保留这两个依赖项,但也许较新的版本不允许这样做。
| 归档时间: |
|
| 查看次数: |
9910 次 |
| 最近记录: |