카테고리 없음

#32 Mockito

kmsoon 2024. 6. 21. 12:13

Mockito는 Java 개발에서 널리 사용되는 목(mock) 객체 프레임워크로, 단위 테스트를 작성할 때 실제 객체를 사용하지 않고 목 객체를 만들어 사용함으로써 테스트를 보다 쉽게 수행할 수 있게 해줍니다. Mockito를 사용하면 의존성을 분리하여 테스트할 수 있고, 테스트 시 외부 시스템이나 복잡한 객체와의 상호작용을 모방할 수 있습니다

 

public class UserService {
    public String getUserGreeting(Long userId) {
        // 실제 구현에서는 데이터베이스나 다른 서비스 호출을 할 수 있음
        if (userId == 1L) {
            return "Hello, User 1!";
        } else {
            return "Hello, User!";
        }
    }
}

public class User {
    private Long id;
    private String name;

    // Constructors, getters, and setters omitted for brevity
}

 

import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
public class UserServiceTest {

    @InjectMocks
    private UserService userService;

    @BeforeEach
    public void setUp() {
        // Setup code here if needed
    }

    @Test
    public void testGetUserGreeting_User1() {
        // given: 사용자 ID가 1일 때
        Long userId = 1L;

        // when: getUserGreeting 메서드를 호출할 때
        String greeting = userService.getUserGreeting(userId);

        // then: 올바른 인사말이 반환되는지 검증
        assertEquals("Hello, User 1!", greeting);
    }

    @Test
    public void testGetUserGreeting_OtherUser() {
        // given: 사용자 ID가 1이 아닐 때
        Long userId = 2L;

        // when: getUserGreeting 메서드를 호출할 때
        String greeting = userService.getUserGreeting(userId);

        // then: 올바른 인사말이 반환되는지 검증
        assertEquals("Hello, User!", greeting);
    }
}

 

 

코드 설명

  1. 서비스 클래스: UserService는 getUserGreeting 메서드를 가지고 있습니다. 이 메서드는 사용자 ID에 따라 다른 인사말을 반환합니다.
  2. 테스트 클래스: UserServiceTest는 JUnit 5와 Mockito를 사용하여 UserService의 메서드를 테스트합니다.
    • @InjectMocks: UserService 객체를 생성하고 주입합니다.
    • @BeforeEach: 각 테스트 메서드 실행 전에 호출되는 메서드입니다.
    • @Test: 각각의 테스트 케이스를 정의합니다.

 

given-when-then 패턴

  • given: 테스트의 사전 조건 설정. 여기서는 사용자 ID를 설정합니다.
  • when: 실제 테스트 동작. 여기서는 getUserGreeting 메서드를 호출합니다.
  • then: 테스트 결과 검증. 여기서는 반환된 인사말을 확인합니다.