❓ TDD
✔️ Test Driven Development (테스트 주도 개발). 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다. 개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성한다. 그런 후에, 그 테스트 케이스를 통과하기 위한 최소한의 코드를 생성한다.
레드 그린 사이클
실패하는 테스트 작성 - 테스트가 통과하는 프로덕션 코드 작성 - 테스트 통과 시 프로덕션 코드 리팩토링
단위 테스트Unit test
TDD의 첫 단계인 기능 단위의 테스트 코드 작성을 의미
➕✏️ TDD 실천법과 도구
장점: 빠른 피드백, 자동검증, 안전하게 기능 보호
관련 프레임워크: xUnit(Junit, DBUnit, CppUnit, Nunit…)
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);
}
}
@SpringBootApplication이 있는 위치부터 설정을 읽어감
→ 항상 프로젝트의 최상단에 위치해야 하는 클래스
내장 WAS(Web Application Server): 애플리케이션 실행 시 내부에서 WAS 실행 (권장)
→ 언제나 같은 환경에서 스프링부트 배포
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: 응답본문 내용 검증
}
}
롬복(Lombok): 자바 개발 시 자주 사용하는 코드 (Getter, Setter, 기본생성자, toString) 어노테이션으로 자동 생성해 준다