-
[Test Code] Mockito를 활용한 랜덤 값 포함 함수 유닛 테스트JAVA 2024. 5. 23. 14:54728x90반응형
이 글에서는 Mockito를 활용하여 Java 애플리케이션에서 랜덤 값을 포함하는 함수를 어떻게 효과적으로 테스트할 수 있는지에 대해 알아보겠습니다.
Mockito
Mockito는 자바에서 Mock 객체를 생성하고 관리할 수 있는 강력한 도구이며, 특히 랜덤 값과 같이 예측하기 어려운 요소가 포함된 함수를 테스트할 때 사용할 수 있습니다.
- Mock 객체란 실제 객체를 대신하는 가짜 객체를 말합니다.
- Mock 객체는 외부 의존성이 많은 코드나 복잡한 비즈니스 로직을 가진 코드를 테스트하는 데 매우 유용합니다.
간단한 예제:
import java.util.Random; import lombok.AllArgsConstructor; @AllArgsConstructor public class Game { private Random random; public int AttackPower(int hp) { int ranNum = random.nextInt(10); return hp * ranNum; } } import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.Random; import org.junit.jupiter.api.Test; public class GameTest { @Test public void testAttackPower() { // Given : // Random 클래스를 모킹합니다. Random mockRandom = mock(Random.class); // 모킹된 Random 클래스는 항상 5를 반환하도록 설정합니다. when(mockRandom.nextInt(10)).thenReturn(5); // 모킹된 Random 객체를 사용하여 Game 인스턴스를 생성합니다. Game game = new Game(mockRandom); // When : // AttackPower 메소드를 호출합니다. int power = game.AttackPower(10); // Then : // 예상되는 공격력을 검증합니다. assertThat(power).isEqualTo(50); } }위 예제에서는 Game 클래스의 AttackPower 메서드를 테스트하는 방법으로 Mockito를 사용하여 Random 클래스를 Mock객체로 만들고, 특정한 값을 반환하도록 설정하여 함수의 예상 출력을 검증합니다.
테스트 코드 작성 순서
- Given : 테스트를 준비하는 단계
- Random 클래스를 Mock 객체로 만들었습니다.
- 랜덤한 숫자를 통제하기 위해 특정 값을 반환하도록 만들었습니다.
- 이러한 Mock 객체를 사용해서 Game 인스턴스를 생성합니다.
- When : 실제로 테스트하고자 하는 동작을 수행하는 단계
- Game 인스턴스의 AttackPower() 메서드를 호출하여 실제 결과값을 얻습니다
- Then : 기대하는 결과를 검증하는 단계
- assertThat()을 사용하여 예상되는 공격력과 실제 메서드 호출 결과를 비교하여 검증합니다.
- assertThat(실제값).isEqualTo(기대값);
- assertThat()을 사용하여 예상되는 공격력과 실제 메서드 호출 결과를 비교하여 검증합니다.
Mockito를 사용하고 Mock 객체를 활용하여 알 수 없는 랜덤 값을 통제하여 테스트 코드를 작성하였습니다.
728x90반응형'JAVA' 카테고리의 다른 글
[스레드 안전성을 위한 선택] synchronized, ReentrantLock, ReentrantReadWriteLock 비교 (1) 2024.09.24 CPU-bound와 I/O-bound 작업의 병렬 처리 (0) 2024.05.23 Java Stream이란? feat. 메모리 로드, 병렬 처리, 연산 흐름 (1) 2024.05.23 AOP - java.lang.ClassCastException (0) 2024.02.23 Type safety: Unchecked cast from ~ (0) 2024.02.16