반응형
🤍소프트웨어 테스트
1. TDD (Test-driven development)
개발 전 테스트 코드를 먼저 작성하는 방식을 의미한다.
2. 왜 TDD를 사용해야 할까?
테스트를 잘 작성하기 위해선, 모든 요구 사항에 대한 철저한 점검이 필요하기 떄문이다!
- 시스템 전반적인 설계 향상
- 개발 집중력 향상
3. 테스트 종류
테스트 종류 | 범위 | 대상 | 속도 | 도구/기법 |
단위 테스트 | 작은 단위(메소드, 클래스) | 개별 로직 | 빠름 | JUnit, Mockito |
통합 테스트 | 모듈 간 상호작용 | 여러 모듈(컨트롤러 - 서비스 등) | 보통 | Spring Boot Test |
시스템 테스트 | 애플리케이션 전체 | 애플리케이션 전체 | 느림 |
1. 단위테스트(Unit Test)
- 개별 메소드, 클래스 등 작은 단위가 예상대로 동작하는지 검증
- 가장 작은 테스트 단위
- Mock 객체를 활용해 외부 의존성을 제거
2. 통합테스트(Integration Test)
- 여러 모듈이 함께 통합될 때 올바르게 작동하는지 확인
- 모듈간 상호작용 검증
- 데이터베이스, 외부 API와의 통신
- 컨트롤러와 서비스 게층이 올바르게 통신하는지 테스트
- 데이터베이스 쿼리가 제대로 작동하는지 확인
3. 시스템 테스트
- 전체 애플리케이션이 사용자 요구사항에 맞게 동작하는지 확인
- 실제 환경과 동일한 상태에서 테스트
🤍Mock 테스트란?
Mock 테스트는 테스트 환경에서 의존성 객체를 대체하기 위해 가짜(Mock)객체를 사용하는 방법이다.
Mock: 테스트 중 실제 객체를 대신하여 동작하는 가짜 객체
- Mock 객체는 실제 로직 실행을 생략하고, 우리가 설정한 미리 정의된 동작을 수행.
- 테스트 대상 객체의 외부 의존성을 제거하고 독립적으로 테스트할 수 있도록 도와줌.
- 보통 단위테스트와 잘 어울린다.
🤍Mock 테스트에서 자주 사용하는 라이브러리
1. Mockito
- Java에서 가장 널리 쓰이는 Mock 라이브러리.
- Mock 객체 생성과 동작 정의를 간단하게 처리.
2. MockMvc
- Spring Framework에서 제공.
- 컨트롤러 레이어 테스트에 사용하며, HTTP 요청/응답을 시뮬레이
🤍테스트 구조
1. Given - 준비 단계
테스트를 실행하기 전에 필요한 초기 조건이나 입력 값을 설정하는 단계
- 테스트의 초기 상태를 정의
- Mock 객체를 생성하거나, 테스트 환경을 초기화
2. When - 실행 단계
테스트에서 검증할 행동(로직 실행)을 실행하는 단계
- 실제로 테스트 대상 메서드 또는 API를 호출
- 이 단계에서 테스트의 핵심 로직이 수행
3. Then - 검증 단계
테스트 실행 결과가 예상한 결과와 일치하는지 확인하는 단계
- 반환된 값, 상태 코드, 예외 발생 여부 등을 검증
- assert나 andExpect와 같은 메서드를 사용해 결과를 확인
예시 코드
@Test
@DisplayName("OAuth 리다이렉트 URL 반환 테스트")
void testOAuthRedirect() throws Exception {
// Given: 초기 조건 설정
String platform = "naver";
String redirectUrl = "https://nid.naver.com/oauth2.0/authorize";
Mockito.when(oAuthService.getRedirectUri(platform)).thenReturn(redirectUrl);
// When: 테스트 실행
mockMvc.perform(get("/oauth/" + platform)
.contentType(MediaType.APPLICATION_JSON))
// Then: 결과 검증
.andExpect(status().isOk())
.andExpect(content().string(redirectUrl));
}
반응형
'Programming > For interview' 카테고리의 다른 글
[Servlet/Spring] Filter, Interceptor, AOP의 차이 (0) | 2025.01.18 |
---|---|
[Java] Java 버전에 따른 핵심 변경 사항 (Java8) (0) | 2024.12.18 |
[JavaScript] JS 기초 중에서 기초, DOM 구조에 대해서 알아보자 (0) | 2024.12.18 |
[Git] Git의 3가지 영역 (0) | 2024.12.17 |
[Spring] HandlerMethodArgumentResolver (0) | 2024.12.11 |