반응형
IntelliJ_스프링 부트에서 테스크 코드 작성하기
테스트 코드 이점
- 단위 테스트는 개발 단계 초기에 문제를 발견하게 도와준다.
- 단위 테스트는 개발자가 나중에 코드를 리팩토링하거나 라이브러리 업그레이 등에서 기존 기능이 올바르게 작동 하는지 확인할 수 있다.(ex.회귀 테스트)
- 단위 테스트는 기능에 대한 불확실성을 감소시킬 수 있다.
- 단위 테스트는 시스테멩 대한 실제 문서를 제공한다. 즉, 단위 테스트 자체가 문서로 사용할 수 있다.
Hello Controller 테스트 코드 작성하기
패키지 생성
일반적으로 패키지명은 웹 사이트의 주소의 역순으로 한다.
ex) admin.jojoldu.com - > 패키지명은 com.jojoldu.admin
Application 클래스 및 HelloController 클래스 생성
package com.IntelliJProject.book.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
}
Application 클래스 코드 작성
package com.IntelliJProject.book.springboot.web;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
}
HelloController 클래스 코드 작성
테스트 코드로 검증
package com.InteglliJProject.book.springboot.web;
import com.IntelliJProject.book.springboot.web.HelloController;
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)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void hello가_리턴된다() throws Exception{
String hello = "hello";
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
}
test폴더에 동일 패키지 생성 후 HelloControllerTest 클래스 작성
코드 작성 후 테스트 메소드 실행
테스트 메소드 실행 통과
Application.java 파일 main 메소드 실행 -> 정상 작동
롬복 추가
build.gradle -> compile('org.projectlombok:lombok')
Action 검색(Ctrl + Shift + A)
Pulgins -> Marketplace 이동 lombok 검색
Lombok 설치 -> 재시작
file > settings (단축키 ctrl + alt + s)
Enable annotation processing 체크
HelloController를 롬복으로 전환하기
com.IntelliJProject.book.springboot.web.dto -> HelloResponseDto 클래스 생성
package com.IntelliJProject.book.springboot.web.dto;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
private final String name;
private final int amount;
}
HelloResponseDto 코드 작성
package com.IntelliJProject.book.springboot.web.dto;
import org.junit.Test;
import static org.assertj.core.api.Java6Assertions.assertThat;
public class HelloResponseDtoTest {
@Test
public void lombok_test(){
//given
String name = "test";
int amount = 1000;
//when
HelloResponseDto dto = new HelloResponseDto(name, amount);
//then
assertThat(dto.getName()).isEqualTo(name);
assertThat(dto.getAmount()).isEqualTo(amount);
}
}
HelloResponseDtoTest 클래스 작성후 코드 작성
HelloControllerTest 코드 작성
package com.IntelliJProject.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 static org.hamcrest.Matchers.is;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void hello_return() throws Exception{
String hello = "hello";
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
@Test
public void helloDto_return() throws Exception{
String name = "hello";
int amount = 1000;
mvc.perform(
get("/hello/dto")
.param("name", name)
.param("amount", String.valueOf(amount)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name", is(name)))
.andExpect(jsonPath("$.amount", is(amount)));
}
}
테스트 코드 정상 작동
반응형
'IDE > IntelliJ' 카테고리의 다른 글
IntelliJ_스프링 부트에서 JPA로 데이터베이스 다루기 (0) | 2021.10.27 |
---|---|
IntelliJ_스프링 부트 시작하기 (0) | 2021.09.29 |