Spring PetClinic 프로젝트 빌드 오류 해결법

Crow·2021년 6월 22일
0

Spring Boot

목록 보기
2/5
post-thumbnail
post-custom-banner

백기선의 스프링 입문 강의(Pet Clinic)에서

  • LastName이 아니라 FirstName으로 검색해 볼까?
  • 정확히 일치하는게 아니라 해당 키워드가 들어있는 걸 찾아볼까?
  • Owner에 age 추가

위의 제시된 과제를 해결하고 난 후,
mvnw packge 명령어로 프로젝트 리빌드를 시도했으나
에러가 발생하며 Maven Package 빌드가 되지 않기 시작했다.

각종 커뮤니티 해결법을 참고해서 해결하려고 노력했지만,
결국 커뮤니티들에서 제시된 방법으로는 해결하지 못하여
터미널 상에서 에러 당시의 로그 메시지들을 천천히 읽어보았고
결국 해결했다.

필자가 처했던 에러 상황과 커뮤니티에서 대부분의 사람들이 처했던
상황을 정리하여 두 가지 해결방법을 알려주고자 한다.




🔒상황1


빌드를 위해 터미널에서 mvnw package 명령어를 실행한 후 위와 같은 에러가 발생했다면,
사실 해답은 매우 간단하다. 답은 빨간색 박스 안에 이미 있다.

🔑해결 방법

  1. 터미널에서
    mvnw spring-javaformat:apply
    위의 명령어를 입력 후 실행한다.
  2. 위와 같이 'BUILD SUCCESS' 라고 출력된다면
    이제 다시 mvnw pacakge 명령어를 입력하고 실행한다.

상황1의 해결 방법은 이게 끝이다.




🔒상황2


상황2는 필자가 처했던 상황이다.
상황1의 해결 방법을 시도했음에도 에러가 발생했고, 결국 터미널 메시지 전체를 하나하나 읽어보았다.
그리고 위의 이미지와 같은 부분의 에러 메시지들을 발견했다.

🔑해결 방법

결론을 말하자면 테스트 코드를 통과하지 못했기 때문이다.

아마 이 에러는 아래의 과제를 아직 수행하지 않은 사람들에게는 발생하지 않을 것이다.

  • LastName이 아니라 FirstName으로 검색해 볼까?
  • 정확히 일치하는게 아니라 해당 키워드가 들어있는 걸 찾아볼까?
  • Owner에 age 추가

이 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 코드 역시 수정하여 이상이 없다는 것을 다시 검증해야한다는 것을 절대 잊지말자.

profile
올빼미를 사냥한 까마귀에서 진화한 독수리
post-custom-banner

0개의 댓글