먼저, 하나의 구역설정 메소드를 만들고 그 안에 중복체크와 초과 체크를 한 뒤 만약 초과일 경우 MaximumZoneLimitException
예외를 발생 시키고 중복일 경우 ZoneAlreadySetException
예외를 발생시킨다.
두 예외에 걸리지 않으면 새 구역 추가 메소드를 실행한 뒤 새로운 영역을 추가하고 저장 한다.
구역설정 메소드
구역 설정 초과 메소드
설정 구역 중복체크 메소드
새 구역 추가 메소드
class MemberZoneServiceTest {
@Autowired
private MemberZoneService memberZoneService;
@Autowired
private MemberRepository memberRepository;
@Autowired
private ZoneRepository zoneRepository;
@Autowired
private MemberZoneRepository memberZoneRepository;
@Test
public void 구역초과체크() throws Exception {
// Given
MemberDTO memberDTO = new MemberDTO();
memberDTO.setKakao_id("123");
memberDTO.setProfile_nickname("Kim");
memberDTO.setProfile_image("url");
memberDTO.setGender("male");
memberDTO.setAge("15");
ZoneDTO zoneDTO1 = new ZoneDTO();
zoneDTO1.setCig_cd(10L);
zoneDTO1.setGu("GangNam");
zoneDTO1.setDong("Sang");
zoneDTO1.setLat(11.11);
zoneDTO1.setLng(22.22);
ZoneDTO zoneDTO2 = new ZoneDTO();
zoneDTO2.setCig_cd(20L);
zoneDTO2.setGu("GangDong");
zoneDTO2.setDong("Young");
zoneDTO2.setLat(33.33);
zoneDTO2.setLng(44.44);
ZoneDTO zoneDTO3 = new ZoneDTO();
zoneDTO3.setCig_cd(22L);
zoneDTO3.setGu("GangBook");
zoneDTO3.setDong("Sung");
zoneDTO3.setLat(55.55);
zoneDTO3.setLng(66.66);
Member member = Member.toMemberEntity(memberDTO);
Zone zone1 = Zone.toZoneEntity(zoneDTO1);
Zone zone2 = Zone.toZoneEntity(zoneDTO2);
Zone zone3 = Zone.toZoneEntity(zoneDTO3);
memberRepository.save(member);
zoneRepository.save(zone1);
zoneRepository.save(zone2);
zoneRepository.save(zone3);
Member findMember = memberRepository.findOne(member.getId());
Zone findZone1 = zoneRepository.findOne(zone1.getId());
Zone findZone2 = zoneRepository.findOne(zone2.getId());
Zone findZone3 = zoneRepository.findOne(zone3.getId());
//when
MemberDTO memDTO = MemberDTO.toMemberDTO(findMember);
ZoneDTO zonDTO1 = ZoneDTO.toZoneDTO(findZone1);
ZoneDTO zonDTO2 = ZoneDTO.toZoneDTO(findZone2);
ZoneDTO zonDTO3 = ZoneDTO.toZoneDTO(findZone3);
//Then
memberZoneService.setMemberZone(memDTO, zonDTO1);
memberZoneService.setMemberZone(memDTO, zonDTO2);
assertThrows(MaximumZoneLimitException.class, () -> {
memberZoneService.setMemberZone(memDTO, zonDTO3);
});
}
assertThrows
는 두 번째 인자인 MemberZoneService.setMemberZone(memDTO, zonDTO3);
를 실행하여 첫 번째 인자인 예외 타입과 같은지(혹은 캐스팅이 가능한 상속 관계의 예외인지) 검사한다.
@Test
public void 구역중복체크() throws Exception {
// Given
MemberDTO memberDTO = new MemberDTO();
memberDTO.setKakao_id("123");
memberDTO.setProfile_nickname("Kim");
memberDTO.setProfile_image("url");
memberDTO.setGender("male");
memberDTO.setAge("15");
ZoneDTO zoneDTO1 = new ZoneDTO();
zoneDTO1.setCig_cd(10L);
zoneDTO1.setGu("GangNam");
zoneDTO1.setDong("Sang");
zoneDTO1.setLat(11.11);
zoneDTO1.setLng(22.22);
ZoneDTO zoneDTO2 = new ZoneDTO();
zoneDTO2.setCig_cd(20L);
zoneDTO2.setGu("GangDong");
zoneDTO2.setDong("Young");
zoneDTO2.setLat(33.33);
zoneDTO2.setLng(44.44);
ZoneDTO zoneDTO3 = new ZoneDTO();
zoneDTO3.setCig_cd(22L);
zoneDTO3.setGu("GangBook");
zoneDTO3.setDong("Sung");
zoneDTO3.setLat(55.55);
zoneDTO3.setLng(66.66);
Member member = Member.toMemberEntity(memberDTO);
Zone zone1 = Zone.toZoneEntity(zoneDTO1);
Zone zone2 = Zone.toZoneEntity(zoneDTO2);
Zone zone3 = Zone.toZoneEntity(zoneDTO3);
memberRepository.save(member);
zoneRepository.save(zone1);
zoneRepository.save(zone2);
zoneRepository.save(zone3);
Member findMember = memberRepository.findOne(member.getId());
Zone findZone1 = zoneRepository.findOne(zone1.getId());
Zone findZone2 = zoneRepository.findOne(zone2.getId());
Zone findZone3 = zoneRepository.findOne(zone3.getId());
//when
MemberDTO memDTO = MemberDTO.toMemberDTO(findMember);
ZoneDTO zonDTO1 = ZoneDTO.toZoneDTO(findZone1);
ZoneDTO zonDTO2 = ZoneDTO.toZoneDTO(findZone2);
ZoneDTO zonDTO3 = ZoneDTO.toZoneDTO(findZone3);
//Then
memberZoneService.setMemberZone(memDTO, zonDTO1);
assertThrows(ZoneAlreadySetException.class, () -> {
memberZoneService.setMemberZone(memDTO, zonDTO1);
});
}
테스트 코드를 처음부터 직접 짜보는건 처음이라 시간도 오래 걸렸고 시행착오도 많았다.
기본적인 자바개념부터 다시 돌아가서 공부하였고, 전반적인 로직흐름과 스프링 구조를 이해하는데 도움이 되었다. 역시 직접 하나하나 겪어보면 실력이 금방 늘수 있을것 같다.