본문 바로가기

JAVA/Spring Boot

스프링 부트 기본설정 및 기본 테스트

반응형

gradle 설정

build.gradle

buildscript {
    ext  {
        springBootVersion = '2.1.7.RELEASE'
    }
    repositories {
        mavenCentral()
        jcenter()
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group 'com.swan.ee'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}
  • ext는 전역변수로 설정
  • repositories는 각 의존성 라이브러리를 어떤 원격 저장소에서 받을지 결정

메인 클래스

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  • Application 클래스는 프로젝트의 메인 클래스.
  • @SpringBootApplication으로 인해 스프링 부트의 자동설정, 스프링 bean 읽기와 생성을 모두 자동으로 설정.
  • @SpringBootApplication이 있는 위치부터 설정을 읽어가기 때문에 항상 프로젝트의 최상단에 위치해야 한다.

main 메소드에서 실행하는 SpringApplication.run으로 인해 내장 WAS를 실행한다.
내장 WAS란 별도로 외부에 WAS를 두지 않고 애플리케이션을 실행할때 내부에서 WAS를 실행하는것.
항상 서버에 톰캣을 설치할필요가 없게 되고, 스프링 부트로 만들어진 jar 파일(실행가능한 java 패키징 파일)로 실행한다.

기본 컨트롤러

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}

테스트

@RunWith(SpringRunner.class)
@WebMvcTest
public class HelloControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void helloTest() {
        String hello = "hello";

        mvc.perform(get("/hello"))
            .andExpect(status().isOk())
            .andExpect(content().string(hello));
    }
}

@RunWith(SpringRunner.class)

  • 테스트를 진행할때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킨다.
  • SpringRunner라는 스프링 실행자를 실행.
  • 스프링 부트 테스트와 JUnit 사이에 연결자 역할을 한다.

@WebMvcTest

  • 여러 스프링 테스트 어노테이션 중 Web(Spring MVC)에 집중할수 있는 어노테이션
  • 선언할경우 @Controller, @ControllerAdvice 등을 사용
  • 단 @Service, @Component, @Repository 등은 사용불가

MockMvc mvc

  • 웹 API를 테스트할때 사용
  • 스프링 MVC 테스트의 시작점
  • HTTP의 GET, POST 등에 대한 API 테스트

롬복

@Getter
@RequiredArgsConstructor
public class HelloResponseDto {

    private final String name;
    private final int amount;
}

@RequiredArgsConstructor

  • 선언된 모든 final 필드가 포함된 생성자를 생성
  • final이 없는 필드는 생성자에 포함되지 않음

롬복 테스트

public class HelloResponseDtoTest {

    @Test
    public void test() {
        //given
        String name = "test";
        int amount = 1000;

        //when
        HelloResponseDto dto = new HelloResponseDto(name, amount);

        //then
        assertThat(dto.getName()).isEqualTo(name);
        assertThat(dto.getAmount()).isEqualTo(amount);
    }
}
  • JUnit의 기본 assertThat 대신 assertj의 assertThat을 사용
    장점?
  • CoreMatchers와 달리 추가적으로 라이브러리가 필요하지 않음
  • 자동완성이 잘 지원

컨트롤러

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "hello"l
    }


    @GetMapping("/hello/dto")
    public HelloResponseDto helloDto(@RequestParam("name") String name,
                                                        @RequestParam("amount") int amount ) {

        return new HelloResponseDto(name, amount);
    }
}

테스트

@RunWith(SpringRunner.class)
@WebMvcTest
public class HelloControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void helloTest() {
        String hello = "hello";

        mvc.perform(get("/hello"))
            .andExpect(status().isOk())
            .andExpect(content().string(hello));
    }

    @Test
    public void helloDtoTest() {
        String name = "hello";
        String 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)));
    }
}

param

  • api 테스트할때 사용될 요청 파라미터를 설정
  • 값은 String만 허용
  • 숫자, 날짜 등의 데이터도 문자열로 변경해야한다.

jsonPath

  • JSON 응답값을 필드별로 검증할수 있는 메서드
  • $를 기준으로 필드명을 명시 ($.name, $.amount로 검증)

 

출처: 스프링부트와 AWS로 혼자구현하는 웹 서비스

저자: 이동욱 지음

반응형

'JAVA > Spring Boot' 카테고리의 다른 글

애플리케이션 설정  (0) 2022.12.12
Swagger-UI url 변경  (0) 2021.05.31
스프링 부트 기본-#2  (0) 2020.10.15
스프링 부트 기본-#1  (0) 2020.10.15
Spring MyBatis사용 및 설정  (1) 2020.10.13