restAssured를 사용한 스프링 부트레스트 응용 프로그램 테스트
한동안 이것과 씨름하고 있어요.rest Assured를 사용하여 Spring Boot REST 응용 프로그램을 테스트하고 싶습니다.
용기가 제대로 회전하는 것처럼 보이지만, 안심하십시오(다른 용기는 용기가 닿는 데 문제가 있는 것 같습니다).
Connection에서 예외가 거부되는 경우가 항상 있습니다.
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
...
테스트 클래스:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SizesRestControllerIT {
@Autowired
private TestRestTemplate restTemplate;
@Test
public void test() {
System.out.println(this.restTemplate.getForEntity("/clothes", List.class));
}
@Test
public void test2() throws InterruptedException {
given().basePath("/clothes").when().get("").then().statusCode(200);
}
}
이상한 부분은test
전달하고 인쇄합니다만,test2
Connection 거부 예외를 가져오고 있습니다.
이 설정에 어떤 문제가 있는지 아십니까?
이 질문에 제가 직접 대답할게요
시간을 더 들인 끝에 알고 보니TestRestTemplate
는 이미 적절한 포트를 인식하고 있습니다.Rest Assured는...
그 결과, 아래 테스트는 문제없이 진행됩니다.
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SizesRestControllerIT {
@LocalServerPort
int port;
@Before
public void setUp() {
RestAssured.port = port;
}
@Test
public void test2() throws InterruptedException {
given().basePath("/clothes").get("").then().statusCode(200);
}
}
전에도 이런 식으로 해봤다고 맹세할 수 있었는데...하지만 다른 주석도 썼던 것 같은데...
https://stackoverflow.com/users/2838206/klubi 의 응답에 근거해, 실행하는 모든 요구에 대해서 포토를 설정하지 않는 경우는, 다음과 같습니다.
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment =
SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SizesRestControllerIT {
@LocalServerPort
int port;
@Before
public void setUp() {
RestAssured.port = port;
}
@Test
public void test2() throws InterruptedException {
given().basePath("/clothes").get("").then().statusCode(200);
}
}
비표준 포트로 동작하고 있습니까?이거 입어봤어?
@Before public static void init(){ RestAssured.baseURI = "http://localhost"; // replace as appropriate RestAssured.port = 8080; }
사용하는 것을 추천합니다.@WebMvcTest
이 경우 필요한 것은 확실한 모의 MVC 의존성뿐입니다.
<dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>spring-mock-mvc</artifactId>
<version>${rest-assured.version}</version>
<scope>test</scope>
</dependency>
의 사용@SpringBootTest
컨트롤러만 테스트하는 것은 오버헤드이며, 모든 용장 콩은 다음과 같습니다.@Component
,@Service
, 등이 작성되어 완전한 HTTP 서버가 기동합니다.자세한 내용은 https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/ #boot-boot-boot-boot-applications-boot-autoconfigured-mvc-boot;
@RunWith(SpringRunner.class)
@WebMvcTest(value = SizesRestController.class)
public class SizesRestControllerIT {
@Autowired
private MockMvc mvc;
@Before
public void setUp() {
RestAssuredMockMvc.mockMvc(mvc);
}
@Test
public void test() {
RestAssuredMockMvc.given()
.when()
.get("/clothes")
.then()
.statusCode(200);
// do some asserts
}
}
Spring Web App의 통합 테스트를 작성하려는 것 같습니다. REST가 보증한 Spring MockMvc 지원에는 이 방법에 대한 정보가 있습니다.
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
public class SizesRestControllerIT {
@Autowired
private WebApplicationContext webApplicationContext;
@Before
public void initialiseRestAssuredMockMvcWebApplicationContext() {
RestAssuredMockMvc.webAppContextSetup(webApplicationContext);
}
@Test
public void test2() throws InterruptedException {
given().basePath("/clothes").get("").then().statusCode(200);
}
}
백둥에 언급되지 않은 것은 봄철 정적인 수입 변화이다.부트스트래핑 스프링에 관한 REST 보증 문서
다른 StackOverflow에서 언급된 문제 Import
반드시 다음을 사용하십시오.
import static io.restassured.module.mockmvc.RestAssuredMockMvc.*;
import static io.restassured.module.mockmvc.matcher.RestAssuredMockMvcMatchers.*;
스프링과 함께 사용하지 마십시오.
import static io.restassured.RestAssured.*;
import static io.restassured.matcher.RestAssuredMatchers.*;
잘못된 가져오기를 사용하면 연결 거부 예외가 발생할 수 있습니다.
심플:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.DEFINED_PORT)
public class CommonScenarioTest {
@BeforeClass
public static void setup() {
RestAssured.baseURI = "http://localhost/foo";
RestAssured.port = 8090;
}
서버가 포트 34965(8080이 아님)에서 앱을 실행하고 있었습니다.
이것으로 문제가 해결되었습니다.
@Autowired
ServerProperties serverProperties;
@Autowired
Environment environment;
public String getPath() {
final int port = environment.getProperty("local.server.port", Integer.class);
return "http://localhost:" + port;
}
@Before
public void setUp() throws Exception {
RestAssured.baseURI = getPath();
}
@Test
public void testResponse(){
response = get("/books");
}
Rest Assured에서 하였습니다.@BeforeAll
메서드를 하여 static .@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@BeforeAll
public void setUp() {
accessToken = getAuthorizationToken();
Util.deleteAllFromPassThroughCourseWorkList(accessToken);
}
대신
@BeforeAll
public static void setUp() {
accessToken = getAuthorizationToken();
Util.deleteAllFromPassThroughCourseWorkList(accessToken);
}
여기서 아이디어를 얻었다.
★★"/clothes"
()을 합니다.
@Test
public void test2() throws InterruptedException {
when().
get("/clothes").
then().
statusCode(200);
}
언급URL : https://stackoverflow.com/questions/40665315/testing-spring-boot-rest-application-with-restassured
'bestsource' 카테고리의 다른 글
테이블에서 TOP N 행을 선택합니다. (0) | 2023.02.23 |
---|---|
ASP의 Date Time 포맷.시스템을 사용한NET Core 3.0Text.Json (0) | 2023.02.23 |
AngularJS - 앵커 태그에 대해 ng-disabled가 작동하지 않음 (0) | 2023.02.23 |
리액트 및 타입 스크립트:컨텍스트 기본값 회피 (0) | 2023.02.18 |
WooCommerce에서 선택한 배송 방법 제목 선택 (0) | 2023.02.17 |