일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 포맷은 최후의 보루
- 객체지향 언어
- Java의 이점
- 내일배움캠프
- TiL_1st_0419
- #내일배움캠프
- Git
- 성장기록
- 생성자
- 메서드
- JVM
- static
- Diary 해우소
- KPT
- 스파르타내일배움캠프TIL
- #스파르타내일배움캠프TIL
- 인스턴스
- Token
- 회고록
- 감사기록
- 변수의 다양성
- 스파르타내일배움캠프
- Java
- #스파르타내일배움캠프
- 스레드
- GitHub
- Github_token
- diary
- 클래스
- 해우소
- Today
- Total
몬그로이
TIL_041, 042 본문
작성시간 순 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
를 보고 해결하긴했는데 이번엔
.andExpect(status().isOk())
위의 상태확인을 사용하지 못하게 됐다..
request 와 result 를 따로 사용하여 검증하려고 했더니 andExpect 부분 끝에 괄호를 닫든, 세미콜론을 하든 에러가 발생했다
andDo 로 끝내려고 했지만 되지 않았다
https://youngsubee.tistory.com/entry/Spring-boot-JsonPathResultMatchers%EC%97%90%EB%9F%AC
참고하여 수동으로 import 했더니 빨간 줄이 사라졌다
하지만 value가 비었다고 나왔다
이걸로 어제부터 너무 고생했는데
통합테스트 할 때는 반드시 필요한 내용이라
나중에 통합테스트를 진행하지 못하게 될까 걱정이다
https://cheese10yun.github.io/spring-guide-test-1/#null
과제를 할 때 참고하라고 받은 링크인데
@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 를 달아줘야 한다는 사실도 추가로 정립하게 되었다
덕분에 디버그모드를 활용하는 방법을 조금 더 숙지하게 되었고 애매하던 지식들 조각이 맞춰졌다
뭔가 이전 코딩의 원본을 지킬 수 있어서 한층 더 뿌듯하다