[spring] TDD (테스트 주도 개발) 방법
TDD ? ( Test Driven Development )
선 테스트코드 작성 후 실제 코드 개발
구현 -> 테스트 -> 리펙토링
Development
-목표주도개발
-사용자 중심 개발
-인터페이스 중심 개발
목표?
-올바르게 작동 -test
-깔끔한 코드 - 이때 refactoring
TDD 3가지 cycle
Red - 실패
Green - 성공
Refactoring test 코드 리팩터링.
TDD 만드는 방법
test파일 만들고싶은 파일에서-goto-test
예시
Controller TDD
HelloWorldController.java
@RestController
public class HelloWorldController {
@GetMapping("/api/helloworld")
public String helloWord(){
return "HelloWorld";
}
}
ctrl+shitft + R 로 테스트 클래스 생성
HelloWorldControllerTest.java
package com.devaon.managecontact.controller;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
@SpringBootTest
class HelloWorldControllerTest {
@Autowired
private HelloWorldController helloWorldController;
//모의 http request, response 만들어 테스트 진행하도록 해줌
private MockMvc mockMvc;
//단지 메소드 호출 테스트
@Test
public void helloWorld() {
System.out.println(helloWorldController.helloWord());
assertThat(helloWorldController.helloWord()).isEqualTo("HelloWorld");
}
//실제 http 테스트
@Test
public void mockMvcHelloWorld() throws Exception {
//MockMvc setting
mockMvc = MockMvcBuilders.standaloneSetup(helloWorldController).build();
//실제 동작하도록 요청
mockMvc.perform(
//get 메소드로 요청
MockMvcRequestBuilders.get("/api/helloworld")
).andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("HelloWorld"));
}
}
*MockMvc *
http request, response 만들어 테스트 진행하도록 해준다
MockMvc 세팅
mockMvc = MockMvcBuilders.standaloneSetup(helloWorldController).build();
실제 동작하도록 요청
mockMvc.perform
get/post/put/patch/delete 메소드로 요청
MockMvcRequestBuilders.get("api/helloworld")
Request와 Response에 대해 구체적인 정보를 노출
.andDo(MockMvcResultHandler.print)
자동화된 결과 체크
andExpect(MockMvcResultMatchers )
status가 200 성공했는지 확인
.andExpect(MockMvcResultMatchers.status().isOk())
response의 body 값이 HelloWorld인지 확인
.andExpect(MockMvcResultMatchers.content().string("HelloWorld"))
TDD 예시 프로젝트
👇👇👇
[spring boot] 연락처 관리 프로젝트 (+TDD)
https://aonee.tistory.com/64?category=369754
[spring boot] 연락처 관리 프로젝트 (+TDD)
✔ 프로젝트 구조 ✔ MVC 패턴 (Model–View–Controller) ✔ 프로젝트 전체 코드 ( 깃허브 ) 👉👉👉 https://github.com/devAon/SpringBoot-Manage-Contact ✔ 프로젝트 코드 및 구현 내용 설명 buil..
aonee.tistory.com
✔ 프로젝트 전체 코드 ( 깃허브 )
👉👉👉 https://github.com/devAon/SpringBoot-Manage-Contact