[TIL] 38. 단위 테스트

김지수·2024년 6월 13일

TIL

목록 보기
38/53
post-thumbnail

단위테스트(Unit Test)

애플리케이션의 특정 기능을 검증하기 위해 작성된 코드입니다. 단위 테스트는 보통 애플리케이션의 작은 단위, 예를 들어 하나의 메서드나 클래스의 동작을 독립적으로 테스트합니다. 이는 애플리케이션의 특정 기능이 예상대로 동작하는지 확인하는데 유용합니다.

단위 테스트 방법

  • JUnit

    자바에서 가장 널리 사용되는 단위 테스트 프레임워크입니다. 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);
    }
}
  • Mockito

    의존성 주입을 통해 테스트 대상을 독립적으로 테스트할 수 있게 도와주는 목(Mock) 객체를 생성하는 라이브러리입니다. 이를 통해 외부 시스템(예: 데이터베이스, 웹 서비스)과의 의존성을 제거하고 테스트할 수 있습니다.

  • Spring Test

    스프링 프레임워크에서 제공하는 테스트 지원 기능으로, 스프링 컨텍스트를 로드하여 통합 테스트를 수행할 수 있습니다. 스프링부트에서는 @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를 사용해 모킹 개념을 이해하고 단위 테스트를 작성했다. 앞으로도 꾸준히 학습에 다양한 테스트 기법을 익혀야겠다.

profile
서툴고 부족한 점이 많지만, 배우고 발전하며 성장하기 위해 노력하겠습니다.

0개의 댓글