Server/Spring

[spring] TDD (테스트 주도 개발) 방법

aonee 2020. 4. 19. 18:14

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

 

반응형