J'essaie de tester une REST api définie dans ma classe de contrôleur à l'aide de REST Assured v4.3.0
, Mais j'obtiens Java.lang.AbstractMethodError
Lorsque j'exécute le test. Je comprends cette erreur se produit parce que j'appelle une méthode abstraite, mais j'ai du mal à la résoudre.
Il semble que l'erreur se produit en raison de .body(is(equalTo("success")))
dans SampleControllerTest.Java
Car lorsque je supprime cette ligne, le test réussit. J'ai essayé plusieurs choses pour le résoudre, mais je n'ai obtenu aucun succès:
io.rest-assured/spring-mock-mvc
org.hamcrest.Matchers.*
Et org.hamcrest.CoreMatchers.*
)org.hamcrest/hamcrest
Dans le fichier pomVoici mon code pour votre référence:
Structure du code:
test
|- src/
| |- main/
| | |- Java/
| | | |- org/
| | | | |- example/
| | | | | |- Application.Java
| | | | | |- SampleController.Java
| |- test/
| | |- Java/
| | | |- org/
| | | | |- example/
| | | | | |- SampleControllerTest.Java
|- target/
|- pom.xml
Application.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);
}
}
SampleController.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";
}
}
SampleControllerTest.Java
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")));
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.Apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.example</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<Java.version>8</Java.version>
<start-class>org.example.Application</start-class>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- JUnit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.rest-assured/spring-mock-mvc -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>spring-mock-mvc</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.rest-assured/json-path -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>4.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.rest-assured/xml-path -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>xml-path</artifactId>
<version>4.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.rest-assured/rest-assured -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Lorsque j'exécute le test en utilisant mvn test
, Voici l'erreur que j'obtiens:
[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)
Merci d'avance pour toute aide!
Il se trouve que io.rest-assured/spring-mock-mvc
la dépendance était en conflit avec io.rest-assured/rest-assured
dépendance. Une fois que j'ai supprimé le io.rest-assured/rest-assured
de pom.xml
, le test a fonctionné avec succès.
Il y a quelques années, lorsque j'utilisais REST Assured version 3.1.1
, Je pourrais conserver ces deux dépendances, mais peut-être que les versions plus récentes ne le permettent pas.