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 |