ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Test Code] Mockito를 활용한 랜덤 값 포함 함수 유닛 테스트
    JAVA 2024. 5. 23. 14:54
    728x90
    반응형

    이 글에서는 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객체로 만들고, 특정한 값을 반환하도록 설정하여 함수의 예상 출력을 검증합니다.

    테스트 코드 작성 순서

    1. Given : 테스트를 준비하는 단계
      • Random 클래스를 Mock 객체로 만들었습니다.
      • 랜덤한 숫자를 통제하기 위해 특정 값을 반환하도록 만들었습니다.
      • 이러한 Mock 객체를 사용해서 Game 인스턴스를 생성합니다.
    2. When : 실제로 테스트하고자 하는 동작을 수행하는 단계
      • Game 인스턴스의 AttackPower() 메서드를 호출하여 실제 결과값을 얻습니다
    3. Then : 기대하는 결과를 검증하는 단계
      • assertThat()을 사용하여 예상되는 공격력과 실제 메서드 호출 결과를 비교하여 검증합니다.
        • assertThat(실제값).isEqualTo(기대값);

    Mockito를 사용하고 Mock 객체를 활용하여 알 수 없는 랜덤 값을 통제하여 테스트 코드를 작성하였습니다.

    728x90
    반응형
Designed by Tistory.