백기선의 스프링 입문 강의(Pet Clinic)에서
위의 제시된 과제를 해결하고 난 후,
mvnw packge 명령어로 프로젝트 리빌드를 시도했으나
에러가 발생하며 Maven Package 빌드가 되지 않기 시작했다.
각종 커뮤니티 해결법을 참고해서 해결하려고 노력했지만,
결국 커뮤니티들에서 제시된 방법으로는 해결하지 못하여
터미널 상에서 에러 당시의 로그 메시지들을 천천히 읽어보았고
결국 해결했다.
필자가 처했던 에러 상황과 커뮤니티에서 대부분의 사람들이 처했던
상황을 정리하여 두 가지 해결방법을 알려주고자 한다.
빌드를 위해 터미널에서 mvnw package 명령어를 실행한 후 위와 같은 에러가 발생했다면,
사실 해답은 매우 간단하다. 답은 빨간색 박스 안에 이미 있다.
상황1의 해결 방법은 이게 끝이다.
상황2는 필자가 처했던 상황이다.
상황1의 해결 방법을 시도했음에도 에러가 발생했고, 결국 터미널 메시지 전체를 하나하나 읽어보았다.
그리고 위의 이미지와 같은 부분의 에러 메시지들을 발견했다.
결론을 말하자면 테스트 코드를 통과하지 못했기 때문이다.
아마 이 에러는 아래의 과제를 아직 수행하지 않은 사람들에게는 발생하지 않을 것이다.
이 3개의 과제 문제를 해결하고 나면 관련 테스트 코드 또한 변경해 주어야한다.
필자는 다음과 같이 OwnerControllerTests.java 파일의 코드 부분들을 수정해 주었다.
test/java/org.springframework.samples.petclinic/owner/OwnerControllerTests.java
@BeforeEach
void setup() {
george = new Owner();
george.setId(TEST_OWNER_ID);
george.setFirstName("George");
george.setLastName("Franklin");
george.setAge(32);
george.setAddress("110 W. Liberty St.");
george.setCity("Madison");
george.setTelephone("6085551023");
Pet max = new Pet();
PetType dog = new PetType();
dog.setName("dog");
max.setId(1);
max.setType(dog);
max.setName("Max");
max.setBirthDate(LocalDate.now());
george.setPetsInternal(Collections.singleton(max));
given(this.owners.findById(TEST_OWNER_ID)).willReturn(george);
Visit visit = new Visit();
visit.setDate(LocalDate.now());
given(this.visits.findByPetId(max.getId())).willReturn(Collections.singletonList(visit));
}
@Test
void testProcessFindFormByFirstName() throws Exception {
given(this.owners.findByFirstName(george.getFirstName())).willReturn(Lists.newArrayList(george));
mockMvc.perform(get("/owners").param("firstName", "George")).andExpect(status().is3xxRedirection())
.andExpect(view().name("redirect:/owners/" + TEST_OWNER_ID));
}
@Test
void testProcessFindFormNoOwnersFound() throws Exception {
mockMvc.perform(get("/owners").param("firstName", "Unknown Surname")).andExpect(status().isOk())
.andExpect(model().attributeHasFieldErrors("owner", "firstName"))
.andExpect(model().attributeHasFieldErrorCode("owner", "firstName", "notFound"))
.andExpect(view().name("owners/findOwners"));
}
@Test
void testProcessFindFormSuccess() throws Exception {
given(this.owners.findByFirstName("")).willReturn(Lists.newArrayList(george, new Owner()));
mockMvc.perform(get("/owners")).andExpect(status().isOk()).andExpect(view().name("owners/ownersList"));
}
위와 같이 테스트 코드를 수정한 후, mvnw package 명령어를 실행하면?
정상적으로 빌드가 완료 된다!!
main 코드를 수정했다면,
관련 test 코드 역시 수정하여 이상이 없다는 것을 다시 검증해야한다는 것을 절대 잊지말자.