2.1 테스트 코드

❓ TDD

✔️ Test Driven Development (테스트 주도 개발). 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다. 개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성한다. 그런 후에, 그 테스트 케이스를 통과하기 위한 최소한의 코드를 생성한다.

➕✏️ TDD 실천법과 도구

장점: 빠른 피드백, 자동검증, 안전하게 기능 보호

관련 프레임워크: xUnit(Junit, DBUnit, CppUnit, Nunit…)

2.2 Hello Controller 테스트 코드 작성

package com.jojoldu.book.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // 스프링부트 자동 설정, 스프링Bean 읽기와 생성 자동설정
public class Application { // 프로젝트의 메인 클래스
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

web 패키지: 컨트롤러와 관련된 클래스 담는 패키지

package com.jojoldu.book.springboot.web;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController // 1: JSON 반환하는 컨트롤러로 만들어 줌
public class HelloController {
    
    @GetMapping("/hello") // 2: Get 요청 받을 수 있는 API 만들어 줌
    public String hello() {
        return "hello";
    }
}

테스트 클래스명엔 꼭 Test 붙일 것

package com.jojoldu.book.springboot.web;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class) // 1: SpringRunner라는 실행자 실행시킴(내장된 것 외에). 
														// springboot 테스트와 JUnit 사이의 연결자
@WebMvcTest(controllers = HelloController.class) // 2: Web에 집중할 수 있는 어노테이션
public class HelloControllerTest {
    @Autowired // 3: 스프링이 관리하는 빈(bean) 주입받음
    private MockMvc mvc; // 4: 웹 API 테스트 시 사용 - HTTP GET, POST 등
    
    @Test
    public void hello가_리턴된다() throws Exception {
        String hello = "hello";
        
        mvc.perform(get("/hello")) // 5: MockMvc 통해 해당주소로 HTTP GET 요청
                .andExpect(status().isOk()) // 6:결과검증(HTTP Header의 status)->200인지
                .andExpect(content().string(hello)); // 7: 응답본문 내용 검증
    }
}

2.3 롬복 소개 및 설치

롬복(Lombok): 자바 개발 시 자주 사용하는 코드 (Getter, Setter, 기본생성자, toString) 어노테이션으로 자동 생성해 준다