(해결완료) MockMvc를 이용한 테스트가 안됩니다.
※※※※※ 해결완료 ※※※※※
mvc.perform()의 get이나 post 같은 매서드 타입을
스태틱임포트 해야하는데
이 때 선택지가 3개 있습니다.
이 중 MockMvcRequestBuilders의 post()를
임포트 하니까 해결이 됐습니다.
RequestBuilder로 캐스팅을 해주지 않아도 되구요
그리고, 이래저래 해보면서 MockMvc 말고도
MockMvcBuilder 객체를 이용해서
build().perform()으로 시작해 똑같이 코드를
작성하면 테스트가 정상적으로 실행됩니다!
※※※※※ 해결완료 ※※※※※
SecurityConfig 테스트 강의에도 질문을 드렸는데..
답이 없길래 그냥 넘어갔는데 여기서도 쓰여
다시 질문드립니다.
MockMvc를 이용해서 테스트를 진행할 때,
@Test
@DisplayName("회원가입 테스트")
void join_test() throws Exception {
// given
JoinRequestDto joinRequestDto = JoinRequestDto.builder()
.username("minsu")
.password("1234")
.email("minsu@gmail.com")
.fullname("김민수")
.build();
String requestBody = objectMapper.writeValueAsString(joinRequestDto);
System.out.println("requestBody = " + requestBody);
// when
ResultActions resultActions = mvc.perform((RequestBuilder) post("/api/join").content(requestBody).contentType(MediaType.APPLICATION_JSON));
// then
}위 부분에서 문제가 생기는 부분은 아래 코드인데요
// when
ResultActions resultActions = mvc.perform((RequestBuilder) post("/api/join").content(requestBody).contentType(MediaType.APPLICATION_JSON));먼저 content를 설정할 수 있는 api?가 없고요.
해당 구문을 RequestBuilder로 캐스팅해야
빨간줄이 사라집니다. 그러니까 perform()이 파라미터로 RequestBuilder를 받게 돼있습니다.
gradle은 아래와 같습니다.
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.12'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'io.com'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'com.auth0:java-jwt:4.2.1'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.h2database:h2'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
}
그리고 테스트쪽 라이브러리는 아래와 같습니다.
Gradle: org.junit.jupiter:junit-jupiter:5.8.2
Gradle: org.junit.jupiter:junit-jupiter-api:5.8.2
Gradle: org.junit.jupiter:junit-jupiter-engine:5.8.2
Gradle: org.junit.jupiter:junit-jupiter-params:5.8.2
Gradle: org.junit.platform:junit-platform-commons:1.8.2
Gradle: org.junit.platform:junit-platform-engine:1.8.2
Gradle: org.mockito:mockito-core:4.5.1
Gradle: org.mockito:mockito-junit-jupiter:4.5.1
답변 2
0
해당 코드는 사실 실행에는 문제가 없으나 캐스팅이 필요한 것 때문에 말씀하시는 것 같습니다.
다만 올려주신 코드만으로는 확인할 수 없습니다. 해당 테스트 메소드에 문제가 발생한 것이 아닌,
테스트 클래스 설정의 문제이거나 잘못된 import문을 작성한 것으로 예상됩니다.
0
정확히 문제가 발생한 부분은
mvc.perform() 코드에서
perform(post()), perform(get()) 등
매서드 타입을 정하는 부분이었습니다.
즉, post()나 get()은 스태틱 임포트 매서든데
인텔리제이에선 선택지가 3개로 나옵니다.
그 중 MockMvcRequestBuilders가 제공하는
post()나 get()을 사용해야 하는데
다른 클래스가 제공하는 매서드를 임포트해
생긴 문제였습니다.
그래서 캐스팅이 요구되었던 것이구요
해결은 되었지만 친절한 답변 감사드립니다.
요청/응답 DTO 관련 문의
0
170
2
안녕하세요 인증이 필요한 url을 위하여 /s를 붙이는것에 대해 질문있습니다.
0
161
1
validation aop사용에 대해서 질문있습니다.
0
245
2
Dummy 클래스 위치에 대한 질문
0
293
2
테스트 방식에 관해서 질문이 있어요
0
292
2
스프링 버전업일 경우에는 Pointcut @PostMapping 조건이 달라질까요?
1
434
1
equals와 longValue 관련 질문드립니다
0
328
1
계좌번호를 Long 타입으로 하는 이유가 무엇일까요?!
0
499
2
[정보공유] Hibernate 로그 작동 안하시는 분들!!
3
346
0
UserControllerTest 테스트 실패 문의
0
318
1
스프링 시큐리티 6.2 버전 이후로 apply() 메서드를 이용한 JwtAuthenticationFilter 가 등록이 안됩니다.
2
1106
1
import 오류
0
426
3
spring initializer gradle 에서 3.x.x 대 밖에 없어요. 2.x.x는 보이지 않는데 어떡하져
0
438
2
안녕하세요 로그엔 성공적으로 들어온것같습니다..
0
237
1
JwtAuthorizationfilter test mvc.performget 관련 질문입니다!
0
286
1
JwtAuthorizationfilter test mvc.performget 부
0
226
1
longValue() 질문
0
228
1
jwt 인가필터 규현및 등록
0
334
1
스프링부트 3버전
1
334
1
권한처리를 위한 세션강제주입
0
418
1
JwtVO 를 인터페이스로 만든 이유
0
359
1
계좌 조회 질문드립니다
0
229
1
DummyObject 에 대하여
0
308
2
DTO를 이너클래스로 계속추가하는 이유
0
695
2





