Test Code ‐ Persistence Layer(퍼시스턴스 레이어) 테스트 - dnwls16071/Backend_Study_TIL GitHub Wiki

📚 레이어드 아키텍처(Layered Architecture)

image

  • 통합 테스트(Integration Test)
    • 여러 모듈이 협력하는 기능을 통합적으로 검증하는 테스트
    • 일반적으로 작은 범위의 단위 테스트만으로는 기능 전체의 신뢰성을 보장할 수 없다.
    • 풍부한 단위 테스트와 큰 기능 단위를 검증하는 통합 테스트

📚 Persistence Layer 테스트

  • 배운 내용을 현재 진행하고 있는 spoteditor 프로젝트에 적용해보았다.
  • Persistence Layer의 경우 비즈니스 로직이 침투해선 안 된다.
@SpringBootTest
@ActiveProfiles("test")
@Transactional
class PlaceRepositoryTest {

	@Autowired private PlaceRepository placeRepository;
	@Autowired private UserRepository userRepository;

	@Test
	@DisplayName("공간을 조회할 수 있다.")
	void 공간을_조회할_수_있다() {

		// given
		User user = userRepository.save(User.builder()
				.email("[email protected]")
				.name("아무개")
				.build());

		PageRequest pageRequest = new PageRequest();
		pageRequest.setPage(1);
		pageRequest.setSize(20);
		pageRequest.setDirection(Sort.Direction.ASC);

		Place place1 = Place.builder()
				.user(user)
				.address(Address.builder()
						.address("테스트1")
						.roadAddress("테스트1")
						.latitude(37.123)
						.longitude(128.123)
						.sido("테스트1")
						.bname("테스트1")
						.sigungu("테스트1")
						.build())
				.description("장소 설명1")
				.name("장소 이름1")
				.category(TOUR)
				.build();

		Place place2 = Place.builder()
				.user(user)
				.address(Address.builder()
						.address("테스트2")
						.roadAddress("테스트2")
						.latitude(37.1234)
						.longitude(128.1234)
						.sido("테스트2")
						.bname("테스트2")
						.sigungu("테스트2")
						.build())
				.description("장소 설명2")
				.name("장소 이름2")
				.category(CAFE)
				.build();

		Place place3 = Place.builder()
				.user(user)
				.address(Address.builder()
						.address("테스트3")
						.roadAddress("테스트3")
						.latitude(37.12345)
						.longitude(128.12345)
						.sido("테스트3")
						.bname("테스트3")
						.sigungu("테스트3")
						.build())
				.description("장소 설명3")
				.name("장소 이름3")
				.category(RESTAURANT)
				.build();
		placeRepository.saveAll(List.of(place1, place2, place3));

		// when
		PageResponse<PlaceResponse> places = placeRepository.findAllPlace(pageRequest);
		List<PlaceResponse> content = places.getContent();

                // then
		assertThat(content).hasSize(3)
				.extracting("name", "description", "category")
				.containsExactlyInAnyOrder(
						tuple("장소 이름1", "장소 설명1", TOUR),
						tuple("장소 이름2", "장소 설명2", CAFE),
						tuple("장소 이름3", "장소 설명3", RESTAURANT)
				);
	}
}

📚 Persistence Layer 정리

  • Persistence Layer는 Data Access 역할을 처리한다.
  • 따라서 비즈니스 가공 로직이 포함되어서는 안 된다.
  • Data에 대한 CRUD에만 집중한 레이어이다.
⚠️ **GitHub.com Fallback** ⚠️