java.lang을 가져오는 중입니다.REST Assured를 사용하여 테스트할 때 AbstractMethodError가 발생함
다음을 사용하여 컨트롤러 클래스에 정의된 REST API를 테스트하려고 합니다.REST Assured v4.3.0
하지만 이해합니다.java.lang.AbstractMethodError
테스트를 실행할 때.추상 메소드를 호출하기 때문에 이 오류가 발생하는 것은 이해하지만 해결하는 데 어려움을 겪고 있습니다.
때문에 오류가 발생하고 있는 것 같습니다..body(is(equalTo("success")))
에SampleControllerTest.java
이 선을 제거하면 테스트가 성공하기 때문입니다.이 문제를 해결하기 위해 몇 가지 방법을 시도했지만 성공하지 못했습니다.
- 온라인에서 제안 및 예제를 검색했지만 이전 버전이거나 관련이 없습니다.
io.rest-assured/spring-mock-mvc
- 다른 매치처를 시도했습니다(
org.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
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);
}
}
샘플 컨트롤러.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";
}
}
샘플 제어기 검정.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)
미리 도와주셔서 감사합니다!
Groovy는 2.5.7에서 3.0.2로 업그레이드되므로 rest-assure/변경 로그를 참조하십시오.txt at master · rest-filename/rest-filename에서 groovy 버전을 pom 파일로 지정할 수 있습니다.
<properties>
<rest-assured.version>4.3.0</rest-assured.version>
<groovy.version>3.0.2</groovy.version>
</properties>
REST Assured 4.3.0의 버그인 것 같습니다. 코드는 4.2.0 버전에서 작동합니다.
열려 있는 이슈를 찾지 못했습니다.https://github.com/rest-assured/rest-assured/issues
4.3.0 대신 4.2.0을 사용했습니다.저한테는 효과가 있어요.
메이븐 프로젝트의 경우 아래 코드가 스프링 부트 프로젝트와 잘 작동합니다.
<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>
```
저는 또한.java.lang.AbstractMethodError
하지만 다른 방법으로.
rest-patcher 4.3 업그레이드 그루비 3을 사용하는 구현, restaired의 릴리스 노트를 참조하십시오.
이 경우 종속성 해결은 그루비를 다운그레이드하여 일부 2.x 버전을 사용합니다.
메이븐을 사용하는 경우:
다음을 사용하여 확인할 수 있습니다.mvn dependency:tree
충돌이 있는 경우 필요한 그루비 종속성을 버전=>3.0.2의 직접 종속성으로 프로젝트에 추가합니다.
그라들을 사용하는 경우:
다음을 사용하여 확인할 수 있습니다.gradle depencencies
충돌이 있는 경우 해결 전략을 추가합니다.
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"
}
}
}
누군가에게 도움이 될 수도 있습니다.
pom.xml에서 resecured의 의존성을 아래와 같이 사용합니다.
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>
Rest Assured 버전을 사용하는 경우4.3.2
그루비 버전을 명시적으로 지정하십시오.3.0.6
그러면 오류가 해결됩니다.
<rest-assured.version>4.3.2</rest-assured.version>
<groovy.version>3.0.6</groovy.version>
행운을 빌어요.
알고 보니io.rest-assured/spring-mock-mvc
종속성이 충돌했습니다.io.rest-assured/rest-assured
의존.일단 제가 그것을 제거했을 때io.rest-assured/rest-assured
pom.xml
테스트가 성공적으로 작동했습니다.
몇 년 전 REST Assured 버전을 사용했을 때3.1.1
이러한 종속성을 모두 유지할 수는 있지만 최신 버전에서는 이를 허용하지 않을 수 있습니다.
언급URL : https://stackoverflow.com/questions/61020200/getting-java-lang-abstractmethoderror-when-i-test-using-rest-assured
'it-source' 카테고리의 다른 글
apk는 이전 버전과 동일한 인증서로 서명되어야 합니다. (0) | 2023.08.09 |
---|---|
VS Code에서 통합 터미널을 별도의 창에서 열 수 있습니까? (0) | 2023.08.09 |
두 json 개체를 jquery와 병합 (0) | 2023.08.09 |
jQuery에서 클릭 앤 홀드를 청취하려면 어떻게 해야 합니까? (0) | 2023.08.09 |
PowerShell: 로컬 사용자 계정 만들기 (0) | 2023.08.09 |