NullNull

간단한 Unit Test 작성하기 본문

프로그래밍 언어/JAVA

간단한 Unit Test 작성하기

KYBee 2024. 4. 4. 23:07

사전 준비

간단한 Unit Test를 작성해보자. 축구 팀의 선수를 만드는 기능을 테스트 해보겠다.

사전에 준비한 클래스는 다음과 같다.

 

Player Class

Player의 정보를 담을 객체이다.

package soccer.team.player;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;

@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
public class Player {
    private String name;
    private String birthday;
    private int number;
    private String nationality;
    private boolean nationalTeam;
    private int height;
    private int weight;
}

 

PlayerService

Player객체를 생성하는 서비스 컴포넌트 이다.

package soccer.team.player;

public interface PlayerService {
    public Player createPlayer(Player newPlayer);
}

 

PlayerRepository

Player객체를 실제 DB와 통신하여 추가하는 레퍼지토리이다.

package soccer.team.player;

import soccer.team.team.Team;

import java.util.List;

public interface PlayerRepository {
    public Player createPlayer(Player newPlayer);
    public void getPlayerByName(String playerName);
    public void deletePlayerByName(String playerName);
}

 

 

서비스 컴포넌트를 테스트하는 코드를 작성했다. Unit Test로 서비스 컴포넌트만 테스트 할 계획이어서, 레퍼지토리는 Mocking 할 계획이다.

package soccer.team.player;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
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;
import soccer.team.player.Player;
import soccer.team.player.PlayerRepositoryImpl;
import soccer.team.player.PlayerServiceImpl;

import static org.mockito.Mockito.doReturn;

@ExtendWith(MockitoExtension.class)
class PlayerServiceImplTest {

		//0
    @InjectMocks
    private PlayerServiceImpl playerService;
    @Mock
    private PlayerRepositoryImpl playerRepository;

    @Test
    @DisplayName("선수 create 테스트")
    public void tc1() {
	      //1
        Player actual = new Player("HALLAND", "1999.10.18", 9, "Norway", true, 197, 77);
        //2
        doReturn(actual).when(playerRepository).createPlayer(actual);

        //3
        Player result = playerService.createPlayer(actual);

				//4
        Assertions.assertEquals(actual, result);
    }
}
  1. 레퍼지토리는 해당 클래스에서 Mocking할 계획이다. 따라서 Mock 객체를 만들고 InjectMocks 로 생성한 Mock 객체를 주입한다.
  2. Player 인스턴스를 하나 만든다.
  3. 레퍼지토리를 모킹한다. 레퍼지토리에게 createPlayer 호출이 가면 해당 테스트 내에서는 actual 인스턴스를 돌려준다.
  4. createPlayer를 실행하고 결과 값을 result에 저장한다.
  5. acutal 과 result를 비교한다.

 

통과 완료

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

Mock? Spy?  (0) 2025.02.04
ObjectMother 패턴 적용하기  (0) 2024.04.04
객체지향 언어의 특징과 설계 원칙  (0) 2022.09.29
예외 처리  (0) 2022.08.14
Abstract class vs Interface  (0) 2022.08.14
Comments