몬그로이

TIL_041, 042 본문

TIL

TIL_041, 042

Mon Groy 2024. 6. 18. 04:40

작성시간 순 List를 만든 후 확인하는 부분에서 풀리지가 않는다

 

.andExpect(jsonPath("$", hasSize(3)))
.andExpect(jsonPath("$[0].todoId", Matchers.is(3))) // Matchers 클래스 import 필요
.andExpect(jsonPath("$[1].todoId", Matchers.is(2)))
.andExpect(jsonPath("$[2].todoId", Matchers.is(1)))

hasSize 라인이 required Type 이 Result Matcher 라고 뜨는데

그 줄을 지우면 멀쩡하던 아랫줄이 경고가 떠버린다

캐스팅을 해도 소용이 없어 다른 것들로 import 했는데도 먹히지 않는다

 

결국 해결하지 못하고 다음 걸로 넘어가기로 했다


다음 테스트 메서드에서도 비슷한 방식을 사용해서 검증해야 했기때문에 더 찾아보기로 했고

https://jypark1111.tistory.com/186

 

[Trouble] JAVA Spring jsonPath 함수 사용 시 에러

JUnit4를 이용하여 Controller 기능을 테스트 하는 도중에 책에서 나온 부분과 실제 함수가 달라 오류가 발생했다. URL 요청에 들어온 파라미터가 제대로 들어왔는지 체크하기 위해 jsonPath 함수를 사

jypark1111.tistory.com

를 보고 해결하긴했는데 이번엔

.andExpect(status().isOk())

위의 상태확인을 사용하지 못하게 됐다..

request 와 result 를 따로 사용하여 검증하려고 했더니 andExpect 부분 끝에 괄호를 닫든, 세미콜론을 하든 에러가 발생했다

andDo 로 끝내려고 했지만 되지 않았다

 

https://youngsubee.tistory.com/entry/Spring-boot-JsonPathResultMatchers%EC%97%90%EB%9F%AC

 

[Spring-boot] JsonPathResultMatchers_Import_에러

JUnit 5 import static org.hamcrest.CoreMatchers.is; 참조: https://hwanud.wordpress.com/2018/09/29/junit5%EC%97%90%EC%84%9C-assertthat%EA%B3%BC-is-%EC%82%AC%EC%9A%A9/ JUnit 4 상황 import static org.springframework.test.web.servlet.result.MockMvcResultMa

youngsubee.tistory.com

참고하여 수동으로 import 했더니 빨간 줄이 사라졌다

 

하지만 value가 비었다고 나왔다

 

이걸로 어제부터 너무 고생했는데

통합테스트 할 때는 반드시 필요한 내용이라

나중에 통합테스트를 진행하지 못하게 될까 걱정이다

 


https://cheese10yun.github.io/spring-guide-test-1/#null

 

Spring Guide - 테스트 전략 - Yun Blog | 기술 블로그

Spring Guide - 테스트 전략 - Yun Blog | 기술 블로그

cheese10yun.github.io

 

과제를 할 때 참고하라고 받은 링크인데

@RunWith 는 @ExtendWith 로, @Ignore 는 @Disabled 로 변경되었다

 


 

ServiceIntergrationTest 코드를 작성하면서 알게된 사실

원본을 해치지 않고도 충분히 테스트 코드를 작성할 수 있다는 것이다

단지 내 사전기본지식이 충분해야하겠지만

 

일단은 통합테스트를 위해서 유저를 세팅하기 위해 세 유저를 가입받는 것을 성공으로 만들어야 했는데

Dto 에서 정보가 넘어가질 않는지 null로 자꾸 떴다

validation 처리 되어 있던 필드값들을 채워주었는데도 불구하고 null 이 떴다

그래서 가입 성공시 넘어가는 redirecturl로 넘어가지 않고 자꾸 404 client error가 떴다

 

처음에는 404 error 라고만 해서 잘 몰랐는데

튜터님을 찾아가 디버그 모드로 이리저리 돌려보자 원인이 null 값으로 넘어가는 문제라는 걸 알 수 있었다

 

그래서 null을 채우는 방식을 모색해야했는데

중요한 건 기존에 작성된 코드는 건드리지 않은 채 테스트 코드를 작성하는 것이었다

setter 뿐 아니라 생성자조차도 따로 만들지 않고 맞춰주는 방식으로 진행하면 된다는 것을 알았다

 

그렇게 나머지 해결은 나에게 미션으로 주어졌다

Dto의 매개변수를 맞춰줬음에도 불구하고 null 이 계속 떴기 때문에 근본적인 원인을 찾아야만 했다

 

@Notnull 이 달린 Dto 를 주입하 때 @Valid 를 달아준다는 것까지는 알고 있었는데

RequestBody 또는 RequestParam 으로 넘긴다는 것까지는 제대로 머리에 박혀있진 않았던게 원인이었다

그래서 Dto로 넘겨서 진행하는 방식을 택했을 때에는 @RequestBody RequestDto requestDto 로 적어줘야했고

RequestForm 으로 진행하는 방식을 택했을 때에는 RequestDto requestDto 로 그대로 넘기되, 테스트 코드에서 

MultiValueMap<String, String> signupRequestForm1 = new LinkedMultiValueMap<>();
signupRequestForm1.add("nickname", "첫번째111l");

와 같은 방식으로 작성해야 했다

이 때 검증부분이

mvc.perform(post("/api/user/signup")
                .params(signupRequestForm1))

로 변경된다

 

또 테스트에서 Repository 대신 mvc 를 사용할 때에는 Repository 들 조차 @MockBean 처리를 해 준 상태에서

진행해야만한다는 사실, mvc 를 배제한 @SpringBootTest 에서는 Repository 등에는 @Autowired 를 달아줘야 한다는 사실도 추가로 정립하게 되었다

 

덕분에 디버그모드를 활용하는 방법을 조금 더 숙지하게 되었고 애매하던 지식들 조각이 맞춰졌다

뭔가 이전 코딩의 원본을 지킬 수 있어서 한층 더 뿌듯하다

 

'TIL' 카테고리의 다른 글

TIL_044  (0) 2024.06.19
TIL_043  (0) 2024.06.18
TIL_040  (1) 2024.06.16
TIL_039  (1) 2024.06.15
TIL_037  (0) 2024.06.12