Mockito는 자바에서 유닛 테스트를 작성할 때 많이 사용되는 mocking 프레임워크입니다. Mockito를 사용하면 테스트 대상 객체를 가짜 객체로 대체하여 의존성을 가지는 객체들을 테스트할 수 있습니다. 이렇게 가짜 객체를 만들어 사용하는데, 이때 Stubbing이란 개념이 등장합니다.
Stubbing은 테스트를 진행할 때 가짜 객체에 대해 어떤 행동을 하도록 지정하는 작업을 말합니다. 즉, 특정 메서드를 호출할 때 가짜 객체가 이에 맞는 동작을 하도록 설정하는 것입니다. 이렇게 하면 실제 객체를 사용하지 않고도, 원하는 동작을 시뮬레이션하거나, 특정 조건에 따라 다른 결과를 반환할 수 있습니다.
예를 들어, 다음과 같은 코드를 생각해보겠습니다:
public class UserService {
private UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public boolean isValidUser(String username) {
User user = userRepository.findUserByUsername(username);
return user != null && user.isActive();
}
}
위 코드에서 UserService
의 isValidUser
메서드를 테스트하려면 userRepository
객체를 mocking하여 가짜 객체로 대체해야 합니다. 또한 가짜 객체의 findUserByUsername
메서드가 실제로 동작하도록 설정해야 합니다.
Mockito를 사용하여 Stubbing을 수행하는 코드는 다음과 같습니다:
@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService;
@Test
public void testIsValidUser() {
User fakeUser = new User("john", true);
Mockito.when(userRepository.findUserByUsername("john"))
.thenReturn(fakeUser);
boolean isValid = userService.isValidUser("john");
assertTrue(isValid);
}
}
위의 예제에서 Mockito.when()
메서드를 사용하여 userRepository.findUserByUsername("john")
메서드가 호출되었을 때, fakeUser
객체를 반환하도록 Stubbing을 설정했습니다. 그리고 userService.isValidUser("john")
을 호출하여 반환값이 예상대로 true인지 검증하고 있습니다.
Mockito를 사용하면 Stubbing을 통해 원하는 동작을 가진 가짜 객체를 쉽게 생성할 수 있으며, 이를 통해 테스트 코드의 유지보수성을 높일 수 있습니다.