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
- 주식
- 접근제어자
- 금리인하
- 프로그래머스
- 미국주식
- 자바
- 알고리즘
- XLF
- 기업분석
- mco
- object
- 객체지향
- 금리인상
- 오버라이딩
- 현금흐름표
- S&P500
- 제태크
- 잉여현금흐름
- FCF
- StringBuffer
- Java
- 그리디 알고리즘
- 백준
- 주린이
- 무디스
- javascript
- 다형성
- 배당성장
- 인플레이션
- etf
Archives
- Today
- Total
오늘의하루
[Test Code] Mockito를 활용한 랜덤 값 포함 함수 유닛 테스트 본문
이 글에서는 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 객체를 활용하여 알 수 없는 랜덤 값을 통제하여 테스트 코드를 작성하였습니다.
'JAVA' 카테고리의 다른 글
[스레드 안전성을 위한 선택] synchronized, ReentrantLock, ReentrantReadWriteLock 비교 (0) | 2024.09.24 |
---|---|
CPU-bound와 I/O-bound 작업의 병렬 처리 (0) | 2024.05.23 |
Java Stream이란? feat. 메모리 로드, 병렬 처리, 연산 흐름 (0) | 2024.05.23 |
AOP - java.lang.ClassCastException (0) | 2024.02.23 |
Type safety: Unchecked cast from ~ (0) | 2024.02.16 |
Comments