[java] Mockito를 사용하여 다양한 테스트 케이스 작성하기

Mockito는 자바를 위한 모의 객체(Mock Objects)를 만들기 위한 오픈 소스 테스트 프레임워크이다. Mockito를 사용하면 더 신뢰할 수 있는 테스트를 작성하고 외부 의존성을 간단히 시뮬레이션할 수 있다. 이 글에서는 Mockito를 사용하여 여러 다양한 테스트 케이스를 작성하는 방법에 대해 알아보겠다.

1. Mockito 소개

Mockito는 모의 객체를 만들고 관리하는 도구로, 기존에 있던 테스트 대역(Test Doubles) 라이브러리들보다 사용하기 간편하고 직관적이다. Mockito를 사용하여 객체의 메서드가 특정한 방식으로 호출되었는지 여부를 확인하거나 특정한 반환값을 지정하는 등 다양한 행위를 모의하는 것이 가능하다.

2. Mockito를 이용한 테스트 작성

2.1. 의존성 주입 테스트

의존성 주입(Dependency Injection)을 사용하는 클래스의 테스트를 작성할 때 Mockito를 사용하면 외부 의존성을 쉽게 모의(mock)할 수 있다. 예를 들어, 의존성 주입을 이용한 UserService 클래스가 있다고 가정해보자. 이 클래스에서 UserDao를 의존성으로 주입받는다면 Mockito를 사용하여 UserDao의 행위를 모의(mock)하고 UserService의 동작을 테스트할 수 있다.

@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {

    @Mock
    private UserDao userDao;

    @InjectMocks
    private UserService userService;

    @Test
    public void testGetUserById() {
        when(userDao.getUserById(1)).thenReturn(new User(1, "John"));
        User user = userService.getUserById(1);
        assertNotNull(user);
        assertEquals("John", user.getName());
    }
}

2.2. 예외 상황 테스트

특정 메서드에서 예외를 던지는지를 확인하는 테스트 케이스를 작성할 때 Mockito를 사용할 수 있다. 예를 들어, 특정 조건에서 예외를 던지는지 확인하는 테스트 케이스를 작성할 때 doThrow를 이용하여 특정 메서드 호출 시 예외가 발생하도록 할 수 있다.

@Test(expected = IllegalStateException.class)
public void testWithdrawWithInsufficientBalance() {
    when(accountService.getBalance(1)).thenReturn(100);
    doThrow(IllegalStateException.class).when(accountService).withdraw(1, 200);
    accountService.withdraw(1, 200);
}

결론

Mockito를 사용하여 다양한 테스트 케이스를 작성할 수 있다. 이를 통해 외부 의존성을 모의하거나 특정한 상황에서 예외를 확인하는 등의 테스트를 보다 쉽게 작성할 수 있다.

위 예제 코드를 참고하여 Mockito를 사용하여 여러 다양한 테스트 케이스를 작성하여 보자. Mockito를 통해 테스트한 코드는 안정성이 향상되고 버그를 더 빨리 발견할 수 있는 효과를 기대할 수 있다.

더 많은 Mockito의 기능과 활용 방법에 대해서는 공식 문서 또는 관련 자료를 참고하면 도움이 될 것이다.

참고 자료: