프로그래밍 언어/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);
}
}
- 레퍼지토리는 해당 클래스에서 Mocking할 계획이다. 따라서 Mock 객체를 만들고 InjectMocks 로 생성한 Mock 객체를 주입한다.
- Player 인스턴스를 하나 만든다.
- 레퍼지토리를 모킹한다. 레퍼지토리에게 createPlayer 호출이 가면 해당 테스트 내에서는 actual 인스턴스를 돌려준다.
- createPlayer를 실행하고 결과 값을 result에 저장한다.
- acutal 과 result를 비교한다.
통과 완료
