애플리케이션의 특정 기능을 검증하기 위해 작성된 코드입니다. 단위 테스트는 보통 애플리케이션의 작은 단위, 예를 들어 하나의 메서드나 클래스의 동작을 독립적으로 테스트합니다. 이는 애플리케이션의 특정 기능이 예상대로 동작하는지 확인하는데 유용합니다.
자바에서 가장 널리 사용되는 단위 테스트 프레임워크입니다. JUnit을 사용하여 테스트 클래스를 작성하고, 각 테스트 메서드에 테스트할 로직을 포함시킵니다.
// 대상 클래스
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}
// 단위 테스트 클래스
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
public class CalculatorTest {
@Test
public void testAdd() {
Calculator calculator = new Calculator();
int result = calculator.add(1, 2);
assertEquals(3, result);
}
}
의존성 주입을 통해 테스트 대상을 독립적으로 테스트할 수 있게 도와주는 목(Mock) 객체를 생성하는 라이브러리입니다. 이를 통해 외부 시스템(예: 데이터베이스, 웹 서비스)과의 의존성을 제거하고 테스트할 수 있습니다.
스프링 프레임워크에서 제공하는 테스트 지원 기능으로, 스프링 컨텍스트를 로드하여 통합 테스트를 수행할 수 있습니다. 스프링부트에서는 @SpringBootTest 어노테이션을 사용하여 애플리케이션 컨텍스트를 로드하고 통합 테스트를 수행할 수 있습니다.
// 서비스 클래스
@Service
public class UserService {
public String getUserById(Long id) {
return "User" + id;
}
}
// 단위 테스트 클래스
import static org.mockito.Mockito.when;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
@SpringBootTest
public class UserServiceTest {
@Autowired
private UserService userService;
@MockBean
private UserRepository userRepository; // 실제로 존재하는 repository로 가정
@Test
public void testGetUserById() {
when(userRepository.findById(1L)).thenReturn(Optional.of(new User(1L, "User1")));
String user = userService.getUserById(1L);
assertEquals("User1", user);
}
}
Mockito를 사용해 모킹 개념을 이해하고 단위 테스트를 작성했다. 앞으로도 꾸준히 학습에 다양한 테스트 기법을 익혀야겠다.