일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C++
- 자바
- programmers
- BFS
- MYSQL
- 데이터베이스
- 스프링
- 백준알고리즘
- 코딩봉사
- softeer
- python
- 1과목
- 코딩교육봉사
- 소프티어
- SW봉사
- 파이썬
- 알고리즘
- SQL
- 프로그래머스
- java
- 백준
- 시나공
- 공부일지
- 정보처리산업기사
- 회고
- 코틀린
- CJ UNIT
- kotlin
- 문제풀이
- 백준 알고리즘
- Today
- Total
JIE0025
[Postman][4] Get Categories (컨트롤러 요청메세지 테스트) 본문
전체 카테고리 가져오는 테스트코드 작성하다가 동작을 안하길래 테스트코드 잘못적은건지 엄청 헤매다가..
애초에 getCategories가 작동하지 않는 상황에서 테스트코드를 적으려고하니 아무것도 안되지라는 생각이 갑자기 들었따. .
나는 기록하면서 가야 빨리 버그를 찾는 듯 해서 빨리 찾고싶은 마음으로 기록하러 왔다.
✅ Given
일단 테스트를 위해 게시글을 만들어줬다. (일단 잘 작동하는 POST 요청메세지 ㅎㅎ..💙)
get 메소드로 전체 데이터를 가져오는거에서 500 에러가 나는데 대체 이유를 알수가 없다.
어제까진 나그래도 성장속도 빠르다고 생각했는데 역시 난 아무것도 모르는 바보다 ㅠㅡㅠㅡㅠ
일단 어디서 문제가 나는지 확인을 하려고, 컨트롤러, DTO, Entity, Service의 작동하는 곳 한개씩 breakpoint를 주었다.
휴 이제 던진다
⏺ 기대값
전체 데이터가 JSON으로 반환되어야하고, 상태코드는 200 OK
브레이크포인트를 열심히 걸어준 효과로 대놓고 여기가 문제인게 확인이 되었다.
레포지토리에서 findAll 해주었는데, size()찍어보니까 0이다. 왜 못가져오지?/????????
✔️ 안되는 코드
@Transactional
public List<CategoryDto> getCategories () {
List<CategoryDto> result = new ArrayList<>();
List<Category> categories = categoryRepository.findAll();
//..... 생략 ..... ////
return result;
}
저번에 참고하려고 봤던 게시글인데, 일단 이걸 다시보니까 뭔가 코드의 다른점이 보였다.
참고만 하고 직접 구현하는 연습을 하고 싶어서 JSON데이터만 조금 참고를 했었는데...
- 나는 일반 JPA Repository를 통해 findALL을 해주었고,
- 이사람 글은 일반 EntityManger 를 사용하는 레포지토리 클래스를 사용한다...
- 이 클래스 내부엔 FindAll 메서드가 있고,
- 쿼리를 m을 쓰는 저걸 써준다....
https://bestinu.tistory.com/52
하 일단 이대로 바꾸니까 작동은 잘한다.
✅ 현재 코드의 문제점
이렇게 되면 엔티티가 두개가 되고, 레포지토리도 2개가 되는데 어떻게 해야할까..? 내일 물어봐야지 ㅠㅠ
아무래도 reply에 있는 디렉토리 구조를 좀 참고해야할것 같기도 하고... 일단 동작하는걸 만드는게 우선이긴 한것같다
CategoryResult
package com.FlagHome.backend.v1.category.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.stream.Collectors;
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class CategoryResult{
private Long id;
private String name;
private Long depth;
private List<CategoryResult> children;
public static CategoryResult of(Category category) {
return new CategoryResult(
category.getId(),
category.getName(),
category.getCategoryDepth(),
category.getChildren().stream().map(CategoryResult::of).collect(Collectors.toList())
);
}
}
CategoryEntityMangagerRepository
package com.FlagHome.backend.v1.category.repository;
import com.FlagHome.backend.v1.category.entity.Category;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import java.util.List;
@Repository
@RequiredArgsConstructor
public class CategoryEntityMangagerRepository {
private final EntityManager em;
public List<Category> findAll(){
return em.createQuery(
"select c " +
"from Category c " +
"where c.parent is NULL"
,Category.class)
.getResultList();
}
}
CategoryCategoryService
@Service
@RequiredArgsConstructor
public class CategoryService {
private CategoryRepository categoryRepository;
private CategoryEntityMangagerRepository categoryEntityMangagerRepository;
@Autowired
public CategoryService(CategoryRepository categoryRepository, CategoryEntityMangagerRepository categoryEntityMangagerRepository) {
this.categoryRepository = categoryRepository;
this.categoryEntityMangagerRepository = categoryEntityMangagerRepository;
}
///////// .... 생략 /////////
@Transactional
public List<CategoryResult> getCategories () {
List<CategoryResult> categories = categoryEntityMangagerRepository
.findAll().stream().map(CategoryResult::of)
.collect(Collectors.toList());
return categories;
}
}
CategoryController
@GetMapping
public ResponseEntity<?> getCategories() {
return ResponseEntity.ok(categoryService.getCategories());
}
이걸 테스트하다보니 문득 생각났는데
POST 날릴 때에도 본인의depth가 부모로 지정된 id의 depth보다 작은지 검증도 추가해줘야할것 같다.!!!!!
맥주가 내눈앞에 있는데 먹고 싶어지는 밤이다 휴
요청메세지 날리면 돌아오는건 잘하는데 테스트코드에선 왜 안되냐고!!!
테스트코드 제대로 공부 안된상태로 뭔가 감만 익히고 있는느낌이긴하다.
공부가 제대로 안된 상황이라 테스트코드가 잘 작동을 안하는걸까?
내가 모르는 스프링의 더 다른 깊숙한 어떤 개념이 있어서 그러는건가? 왜 안되지?
ㅇ ㅓㅁㄴㅎ어ㅗㄴㅁ일단 더한다고 해서 뭐가 될것 같지는 않다.
내일 어떻게 할건지 문제만 파악하고 그만해야겠다.
🏃 다음에 할일 정리!
https://jie0025.tistory.com/338
'백엔드 > 테스트' 카테고리의 다른 글
[Postman][5] PUT- 카테고리 수정(컨트롤러 요청메세지 테스트) (0) | 2022.12.20 |
---|---|
[현재 상황 분석] 어디가 문제일지 & 앞으로 봐야할 부분들 찾기 (0) | 2022.12.19 |
[Postman][3] depth가 1~3 인 카테고리 추가 (컨트롤러 요청메세지 테스트) (0) | 2022.12.18 |
[MockMvc] CategoryControllerTest (1) depth가 0인 카테고리 추가 (0) | 2022.12.17 |
[Postman][2] id가 1인 카테고리 수정 (컨트롤러 요청메세지 테스트) (0) | 2022.12.17 |