spring/spring 이론

테스트 코드

leehyeon-dv 2024. 11. 28. 22:02

1. 테스트 코드 

테스트 코드는 왜 작성해야할까 ?  

  • 개발과정에서 문제를 미리 알 수 있다
  • 리팩토링의 리스크가 줄어든다
  • 애플리케이션을 재 가동해 직접 테스트 하는것보다 빠르게 진행할 수 있다
  • 코드 작성 목적 및 불필요한 내용의 추가를 방지할 수 있다 

 

📄테스트 코드 작성 전 테스트 과정 

  • 코드를 수정한다
  • 서버를 동작시킨다
  • 테스트에 필요한 데이터를 DB에 입력한다
  • 메소드를 동작시킨다
  • 테스트를 마치고 DB를 확인한다
  • 반복

규모가 커지면 이 방법으로 테스트를 하면 매우 귀찮다 따라서, 

📝 테스트 코드 작성 후 테스트 과정

  • 코드를 수정
  • 테스트 코드 실행
  • 결과 확인

😊장점

  • 서버 실행하는 등의 시간절약
  • 필요한 데이터를 미리 기입하고 테스트 끝나고 정리하는 등의 행동을 하지 않아도 된다

테스트 코드는 다양한 패턴이 있다 

이중 알아볼 패턴은 given - when - then 패턴이다(테스트 코드를 3단계로 구분해 작성하는 방법)

  • given : 테스트 실행을 준비하는 단계
  • when : 테스트를 진행하는 단계
  • then  : 테스트 결과를 검증하는 단계

🔻given-when-then

public class example {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testAddUser() throws Exception {
        // Given: 새로운 사용자의 정보
        String username = "testuser";
        String password = "password123";

        // When: 사용자를 추가하는 API를 호출 → 테스트 검증을 위한 준비
        mockMvc.perform(post("/api/users")
                .param("username", username)
                .param("password", password))
                .andExpect(status().isOk()) // Then: 응답 상태가 200이어야 함
                .andExpect(content().string("User added successfully"));

        // Then: 사용자가 성공적으로 추가되었는지 확인 → 테스트 결과 검증
        mockMvc.perform(get("/api/users/" + username))
                .andExpect(status().isOk())
                .andExpect(content().string("true"));
    }
}

 

2. 애플리케이션 테스트를 위한 도구 

 JUnit( 자바에서 활용되는 대표적인 테스트 프레임워크)

함수(또는 메서드)는 단위로 볼 수 있고, 이러한 작은 단위를 검증할때, 유용한 것이 JUnit이다

  • 테스트 방식을 구분할 수 있는 에너테이션 제공
  • @Test 애너테이션으로 메서드를 호출할때마다 새 인스턴스를 생성, 독립 테스트 가능
  • 예상결과를 검증하는 어설션 메서드 제공
    • @Test                                                                                                                                                                         public void example(){                                                                                                                                                         int sum = 2+3;                                                                                                                                                             assertEquals(5, sum);  }
  • 사용방법이 단순, 테스트 코드 작성시간이 적음
  • 자동실행, 자체 결과를 확인하고 즉각 피드백 제공

JUnit의 어노테이션

  • Test : 테스트 코드를 포함한 메서드 
  • BeforeAll : 테스트 시작 전 호출되는 메서드
  • BeforeEach  : 각 테스트 메서드 실행 전 호출되는 메서드
  • AfterAll : 테스트 종료 후 호출되는 메서드
  • AfterEach : 각 테스트 메서드 실행 후 호출되는 메서

3. 좋은 테스트를 작성하는 5가지 속성

  • First (빠르게) : 빠르게 수행할 수 있는 테스트를 지향한다 (단순한 목적, 외부환경을 사용하지 않는 단위테스트)
  • Isolated(독립적이게) : 하나의 목적을 위한 하나의 대상에서만의 수행을 지향한다                                                                                                                                                                        (외부 소스 사용시 테스트 실패 할 수 있음)
  • Repeatable(반복 가능하게) : 어떤 환경에서도 수행가능한 테스트를 지향한다                                                                                                                                                              (개발환경이나 네트워크 연결 여부와 상관없이 수행)
  • Self-Validating(자가검증) : 그 자체로 검증이 완료되는 테스트를 지향한다                                                                                                                     (결과값과 기댓값의 비교를 코드내부가 아닌 개발자가 눈으로 직접 확인해선 안됨)
  • Timely(적시에) : 코드 구현 전에 테스트 코드의 작성을 지향한다 (TDD가 아니라면 제외)                                                                                                                                                                                      ※TDD = 테스트 주도 개발

'spring > spring 이론' 카테고리의 다른 글

스프링 부트 3 둘러보기  (0) 2024.12.20
스프링 부트 시작하기  (0) 2024.12.20
백엔드 개발자가 알아두면 좋은 지식  (0) 2024.12.19
의존성 주입이란 무엇일까?  (0) 2024.11.28