Framework/Spring

[1주차] 스프링 부트 테스트 코드 작성, JPA로 데이터베이스 접근하기

MINGYUM 2022. 5. 8. 11:57

1. 개요

 

01장 인텔리제이로 스프링 부트 시작하기

02장 스프링 부트에서 테스트 코드를 작성하자

03장 스프링 부트에서 JPA로 데이터베이스를 다뤄보자

 

2. 요약

개발 디렉터리 구조

    @Test
    public void helloDto가_리턴된다() throws Exception{
        String name = "hello";
        int amount = 1000;

        mvc.perform(get("/hello/dto")
                        .param("name", name)
                        .param("amount", String.valueOf(amount)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.name", is(name)))
                .andExpect(jsonPath("$.amount", is(amount)));
    }

ControllerTest 작성 과정에서 andExpect함수에서 jsonPath를 이용해 생성된 Json의 필드 하나하나를 검증할 수 있음을 알게 되었다. 

기존에는 아래처럼 return값을 get한 다음에 // then 부분에서 하나하나 assertThat에서 objectMapper의 기능을 이용해 원하는 객체를 JSON값으로 변형해 필드값을 하나하나 테스트 하였었는데, 이렇게 perform함수에서 바로 사용하는 것이 더 깔끔하다고 생각하였다.

추가로 JpaRespository를 사용해 PostRepository를 만들고, 이를 Test해보고자 하였는데, 이렇게 에러가 뜨면서 PostsRepository내부의 메서드들인 save, findAll 등을 사용할 수 없는 문제가 있었다. 

 

Repository가 아니더라도 기타 의존성을 추가하는 부분에서도 같은 에러가 떴다. 
data jpa 부분에서 라이브러리가 정상적으로 설치되지 않은 탓이라 생각하여, build.gradle을 아래와 같이 수정하여 재시작하니 오류가 해결될 수 있었다. 

dependencies {
    annotationProcessor(
            'org.projectlombok:lombok',
    )

    implementation(
            'org.springframework.boot:spring-boot-starter-web',
            'org.springframework.boot:spring-boot-starter-data-jpa',
            'org.springframework.boot:spring-boot-starter-thymeleaf'
    )

    testImplementation(
            group: 'org.hamcrest', name: 'hamcrest-core', version: '1.3',
            'org.springframework.boot:spring-boot-starter-test',
    )

    compileOnly(
            'org.projectlombok:lombok',
            'com.h2database:h2'
    )
}

 

+ Test 실행 중 Gradle 오류가 뜬다면 아래 경우를 의심해볼 것!

https://sujl95.tistory.com/79 

Gradle 파일 경로에 한글이 포함되어있으면 실행이 안될 수 있다.

 

3. 느낀점

항상 start.spring.io에서 프로젝트를 파서 build.gradle를 직접 타이핑하는 경우는 없었다보니, 코딩하는 과정에서 라이브러리가 없어서 에러가 뜨는 경우가 많이 발생하였다. 위에서 언급한 것처럼 JpaRepository 의 내부 메소드들을 불러올 수 없는 경우도 마찬가지이다. 

또한 H2 Database에 접근하는 테스트 코드를 실행할 때 ApplicationContext Error가 떴었다. 당장 오류를 수정해보진 못했지만, MySQL로 이동해 application.properties에서 스프링과 연동하는 작업을 통해 해결할 예정이다.