web-dev-qa-db-fra.com

Obtenir Java.lang.AbstractMethodError lorsque je teste avec REST Assured

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:

  • Recherche en ligne de suggestions et d'exemples, mais ils concernent des versions plus anciennes ou ne sont pas liés à io.rest-assured/spring-mock-mvc
  • J'ai essayé différentes correspondances (org.hamcrest.Matchers.* Et org.hamcrest.CoreMatchers.*)
  • Tentative d'ajout explicite de la dépendance org.hamcrest/hamcrest Dans le fichier pom

Voici 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!

2
pgngp

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.

0
pgngp