web-dev-qa-db-ja.com

REST Assuredを使用してテストすると、Java.lang.AbstractMethodErrorが発生する

_REST Assured v4.3.0_を使用してコントローラクラスで定義されたREST apiをテストしようとしていますが、テストを実行すると_Java.lang.AbstractMethodError_が表示されます。このエラーが発生していることを理解しています私は抽象メソッドを呼び出しているのですが、それを解決するのに苦労しています。

この行を削除するとテストが成功するため、_SampleControllerTest.Java_の.body(is(equalTo("success")))が原因でエラーが発生しているようです。私はそれを解決するためにいくつかのことを試みましたが、成功しませんでした:

  • 提案と例をオンラインで検索しましたが、それらは古いバージョンのものであるか、_io.rest-assured/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;

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>
_

_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)
_

事前に助けをありがとう!

2
pgngp

io.rest-assured/spring-mock-mvc依存関係がio.rest-assured/rest-assured依存関係と競合していたことがわかりました。 io.rest-assured/rest-assuredpom.xmlから削除すると、テストは成功しました。

数年前、REST保証バージョン3.1.1を使用していたとき、これらの依存関係を両方とも維持できましたが、新しいバージョンではこれが許可されていない可能性があります。

0
pgngp