Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- UpstageAILab#국비지원
- 패스트캠퍼스업스테이지부트캠프
- 업스테이지패스트캠퍼스
- 티스토리챌린지
- UpstageAILab
- 오블완
- 국비지원
- 패스트캠퍼스
- 패스트캠퍼스AI부트캠프
- 패스트캠퍼스업스테이지에이아이랩
Archives
- Today
- Total
김민주
[TIL] 241115 - Mockito 기반 테스트 코드 작성 본문
Do - List
- 코드카타 (Java 10문제)
- 테스트 코드 작성법 정리
- User 테스트 코드 작성 시작
- 코드 리뷰 + PR + Merge
테스트 코드 작성법
Mockito란?
Mockito는 Java 애플리케이션에서 단위 테스트를 쉽게 작성할 수 있도록 돕는 Mocking 프레임워크입니다.
Spring 개발 시 여러 객체들 간의 의존성이 생기는데, 이러한 의존성을 해결하기 위해 객체의 의존성을 가짜(Mock)로 대체하여 특정 동작이나 반환값을 지정할 수 있습니다. 이를 통해 실제 의존 객체의 상태나 동작에 영향을 받지 않고 독립적인 테스트를 수행할 수 있습니다.
테스트 코드 작성법
1. Mockito 설정
Mockito를 사용하려면 pom.xml 또는 build.gradle에 의존성을 추가해야 합니다.
testImplementation 'org.mockito:mockito-core:4.6.1' // gradle 의존성
2. 기본 사용법
기본적으로 Mockito는 테스트 대상 클래스에서 필요한 의존성을 Mock 객체로 대체합니다.
예를 들어, UserService 클래스가 UserRepository에 의존한다고 가정해 보겠습니다.
3. 테스트 대상 클래스 예시
- UserService
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User findUserByUsername(String username) {
return userRepository.findByUsername(username)
.orElseThrow(() -> new RuntimeException("User not found"));
}
}
- UserRepository
public interface UserRepository {
Optional<User> findByUsername(String username);
}
4. Mockito 테스트 작성하기
UserService의 findUserByUsername 메서드를 테스트하는 코드를 작성합니다.
public class UserServiceTest {
@Mock
private UserRepository userRepository; // Mock 객체 생성
@InjectMocks
private UserService userService; // Mock 객체가 주입된 UserService 생성
@BeforeEach
public void setup() {
MockitoAnnotations.openMocks(this); // Mockito 초기화
}
@Test
public void testFindUserByUsername_UserExists() {
// 가짜 User 객체 설정
User mockUser = new User("testUser", "password");
when(userRepository.findByUsername("testUser")).thenReturn(Optional.of(mockUser));
// 실제 테스트 수행
User result = userService.findUserByUsername("testUser");
// 결과 검증
assertEquals("testUser", result.getUsername());
assertEquals("password", result.getPassword());
}
@Test
public void testFindUserByUsername_UserNotFound() {
// 존재하지 않는 사용자의 경우 Optional.empty() 반환
when(userRepository.findByUsername("unknownUser")).thenReturn(Optional.empty());
// 예외 발생 테스트
assertThrows(RuntimeException.class, () -> userService.findUserByUsername("unknownUser"));
}
}
- @Mock: UserRepository 인터페이스를 Mock 객체로 만듭니다.
- @InjectMocks: UserService 클래스에 @Mock으로 생성된 의존성을 주입합니다.
- MockitoAnnotations.openMocks(this): @Mock 및 @InjectMocks가 있는 객체를 초기화합니다.
- when(...).thenReturn(...): 특정 메서드 호출에 대해 반환값을 지정합니다.
- assertThrows: 예외가 발생하는지 검증합니다.
5. 유용한 Mockito 메서드
- verify(mock).method(): Mock 객체의 특정 메서드가 호출되었는지 확인합니다.
- doThrow(...).when(mock).method(): 메서드 호출 시 예외를 발생시키도록 설정합니다.
'STUDY > TIL' 카테고리의 다른 글
[TIL] 241119 - delivery project 결과물 (1) | 2024.11.19 |
---|---|
[TIL] 241118 - EC2에서 Docker Compose하기 (3) | 2024.11.18 |
[TIL] 241114 (0) | 2024.11.14 |
[TIL] 241113 (0) | 2024.11.14 |
[TIL] 241112 - AI API 키 발급 및 테스트 (2) | 2024.11.12 |