스프링부트와 AWS로 혼자 구현하는 웹 서비스 2 - JUnit

1 minute read

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

💜프로젝트 구조

intelliJ 2021.2 버전 기준

intelliJ에서 gralde 기반의 java 프로젝트를 생성하면 기본적으로 다음과 같은 프로젝트 디렉토리 구조가 생성된다.

211004215336.png

File -> Project Structure 에서 프로젝트 구조를 확인할 수 있다. 또는 프로젝트 루트 디렉토리에 마우스 우클릭 -> Open Module Settings 또는 [F4] 를 입력하여 프로젝트 구조를 확인할 수도 있다.

main 모듈, <Project>.main

  • root directory : <Project>\src\main
  • source folder : <Project>\src\main\java

test 모듈, <Project>.test

  • root directory : <Project>\src\test
  • test source folder : <Project>\src\test\java

211004220244.png

211004220210.png

💜Application

Application 클래스는 앞으로 만들 프로젝트의 메인 클래스이다.

스프링부트의 자동 설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정한다.

@SpringBootApplication

특히 @SpringBootApplication 위치부터 설정을 읽어나간다.

그러므로 Application 클래스는 항상 프로젝트 최상단에 위치해야한다.

package hyep.study.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // start of application, top of application, auto SpringBoot configuration, Spring Bean reading and creation
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args); // execute internal WAS
    }
}

main 메소드에서 실행하는 SpringApplication.run으로 인해 내장 WAS가 실행된다.

내장 WAS 는 별도로 외부 WAS를 두지 않고 애플리케이션을 실행할 때 내부에서 WAS를 실행하는 것을 이야기한다.

그러면 서버에 톰캣과 같은 WAS를 설치할 필요가 없다.

스프링 부트로 만들어진 Jar(실행가능한 Java 패키징 파일)로 실행하면 된다.

🥕 내장 WAS 를 권장하는 이유 ?

  • 언제 어디서나 같은 환경에서 스프링 부트를 배포할 수 있기 때문이다.

💜Test

테스트하고자 하는 대상 클래스(HelloController) 명에 마우스 우클릭 -> Go To -> Test 또는 [ctrl+shift+T] 를 입력하여 테스트 클래스(HelloControllerTest)를 만들 수 있다.

테스트 클래스는 대상 클래스 이름에 Test를 붙인다.

211004215453.png

해당 클래스는 설정된 test source folder 에 자동으로 생성되고, test source folder가 지정되어 있지 않으면, HelloController 클래스와 같은 경로에 생성된다.

211004215950.png 211004215712.png

테스트 클래스를 이용해 HelloController 클래스의 테스트를 성공했다.

211004223147.png

💜Spring Boot Annotations

  • @SpringBootApplication
  • @RestController
  • @GetMapping
  • @WebMvcTest
  • @AutoWired

💜org.springframework.test.web.servlet.MockMvc

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/web/servlet/MockMvc.html

💜org.springframework.test.context.junit4.SpringRunner

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/context/junit4/SpringRunner.html


Reference