본문 바로가기
Java

묘공단-스프링부트3 4장

by 똘맹이14 2023. 9. 30.
이 글은 골든래빗 《스프링 부트 3 백엔드 개발자 되기 - 자바 편》의 4장 써머리입니다.​
public class JUnitTest {
    @DisplayName("1+2는 3이다.")
    @Test
    public void junitTest() {
        int a = 1;
        int b = 2;
        int sum = 3;


        Assertions.assertEquals(sum,  a + b);

    }

테스트

 

테스트 코드 작성의 목적 : 작성된 코드가 잘 작동 되는지 확인함을 목적으로 함

장점 : 유지 보수가 편함, 개발한 코드가 잘 동작하는지 확인 가능

 

 

스프링부트에서 테스트 코드에 대한 디렉토리는 기본 프로젝트 생성시 함께 생성됨

 

테스트 코드 작성 패턴은 여러가지 방식이 있으나 본 교재에서는 

 Given-when-then 방식을 사용함

  Given : 테스트 실행을 준비하는 단계

  When : 테스트를 진행하는 단계

  Then : 테스트 결과를 검증하는 단계

코드 예시

@DisplayName("새로운 메뉴를 저장한다.")
@Test
public void saveMenuTest() {
//Given : 메뉴를 저장하기 위한 준비 

final String name ="아메리카노";
final int price = 2000;

final Menu americano = new Menu(name, price);

//when: 실제로 메뉴를 저장
final long saveId = menuService.save(americano);

//then : 메뉴가 잘 추가 되었는지 검증
final Menu saveMenu = menuService.findById(saveId).get();
asserThat(saveMenu.getName()).isEqualTo(name);
asserThat(saveMenu.getPrice()).isEqualto(price);
}

 

스프링부트는 애플리케이션 테스트를 위한 도구와 애너테이션을 제공함

spring-boot-start-test에 도구가 모여 있음

 

JUnit이란 자바를 위한 단위 테스트 프레임워크 이때의 단위는 메서드를 말함

 

Junit특징

1. 테스트 방식을 구분 할 수 있는 애너테이션 제공

2. @Test 애너테이션으로 메서드를 호출할때 마다 새 인스턴스 생성으로 독립 테스트 가능

3. 예상 결과를 검증하는 어설션 메서드 제공

4. 사용법이 단순, 테스트 코드 작성 소요 시간이 적음

5. 자동 실행, 자체 결과를 확인하고 즉각적인 피드백 제공

 

 

 

 JUnit으로 단위 테스트 코드 만들기

src>test>java>JUnitTest.java

 

public class JUnitTest {
    @DisplayName("1+2는 3이다.")
    @Test
    public void junitTest() {
        int a = 1;
        int b = 2;
        int sum = 3;


        Assertions.assertEquals(sum,  a + b);

    }

 

실패하는 케이스 생성하여 테스트

public class JUnitTest {
    @DisplayName("1+3는 4이다.")
    @Test
    public void junitFailedTest() {
        int a = 1;
        int b = 3;
        int sum = 3;


        Assertions.assertEquals(sum,  a + b);

    }

 

제대로된 테스트 코드 작성하기

TestController.java 파일을 열고 클래스명 위엣 마우스 위치 시키고 Alt+Enter을 누르면 테스트 파일 자동 생성됨

 

TestContollerTest.java

@SpringBootTest //메인 애플리케이션의 @SprinbBootApplication이 있는 클래스를 찾고 그 클래스에 포함되어 있는 Bean을 찾은 다음 테스트용 Application Context를 만듬
@AutoConfigureMockMvc //MockMvc를 자동생성으로 Coontroller를 테스트 할때 사용되는 클래스
class TestControllerTest {
    @Autowired
    protected MockMvc mockMvc;


    @Autowired
    private WebApplicationContext context;

    @Autowired
    private MemberRepository memberRepository;


    @BeforeEach //테스트 실행전에 실행되는 매서드로 여기서는 mockkMvcSetUp()를 실행해 MockMvc를 설정
    public void mockMmcSetUp() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
    }

    @AfterEach //테스트 실행후 실행되는 애너테이션 여기서는 cleanUp을 실행해 member 테이블의 데이터 삭제
    public void cleanUp() {
        memberRepository.deleteAll();
    }
    
    
     @DisplayName("getAllMembers: 아티클 조회에 성공한다.")
    @Test
    public void getAllMembers() throws Exception {
        // given
        final String url = "/test";
        Member savedMember = memberRepository.save(new Member(1L, "홍길동"));

        // when
        final ResultActions result = mockMvc.perform(get(url) // 1
                .accept(MediaType.APPLICATION_JSON)); // 2

        // then
        result
                .andExpect(status().isOk()) //3
                //4
                .andExpect(jsonPath("$[0].id").value(savedMember.getId()))
                .andExpect(jsonPath("$[0].name").value(savedMember.getName()))

 

1. perfrom() 요청을 전송하는 메서드

2. accpent() 요청을 보낼때 어떤 타입으로 응답을 받을지 결정하는 메서드

3. andExport() 응답을 검증

4. jasonPath은  Json 응답값을 가져오는 역활

이 글은 골든래빗 《스프링 부트 3 백엔드 개발자 되기 - 자바 편》의 4장 써머리입니다.

 

'Java' 카테고리의 다른 글

묘공단-스프링부트3 6장  (0) 2023.10.10
묘공단-스프링부트3 5장  (0) 2023.10.03
묘공단-스프링부트3 3장  (0) 2023.09.28
묘공단-스프링부트3 2장  (0) 2023.09.28
인프라 엔지니어 자바 스터디 시작하다.  (0) 2023.09.14