2021/02/17 - [Development/Java] - Spring Boot Test Case 작성에 대한 생각 - Repository Test
지난 글에 이어 이번에는 Service 테스트에 대해서 적어보려 한다. 아래는 내가 작성한 UserService 에 대한 테스트케이스 이다.
@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {
private UserService userService;
@Mock
private UserRepository userRepository;
private Users user1;
@Before
public void setup(){
userService = new UserService(userRepository);
user1 = Users.builder()
.email("test01@test.com")
.name("test01")
.status(UserStatus.APPLIED)
.build();
}
@Test
public void findUserById(){
when(userRepository.findById("test01@test.com")).thenReturn(Optional.of(user1));
Users user = userService.findUserById("test01@test.com");
verify(userRepository).findById("test01@test.com");
Assert.assertNotNull(user);
Assert.assertEquals("test01@test.com", user.getEmail());
}
}
@Before 에서 UserService 를 생성해주고 Users 객체도 만들어 줬다. 그리고 UserRepository 는 Mock 으로 정의해줬다.
실제 테스트케이스에는 when() 을 이용해서 UserRepository 가 실행됐을 때 미리 정의해둔 user1 객체를 리턴하게 만들었다. 그리고 verify 를 이용해서 실제 실행 여부를 확인했다.
UserRepository를 Mock 으로 정의해서 테스트 케이스를 만들었다. 이유는 이미 repository 에 관련된 테스트는 repository test 에서 수행했다고 가정을 했기 때문에 굳이 repository를 실제 bean 으로 주입하고 DB 를 연결할 필요가 없다고 생각을 했다. Service 테스트케이스에서 중점적으로 체크해야 할 내용들은 조건문 처리, Exception 처리 등이 있을것 같다. 아래 코드는 Exception 에 대한 테스트 코드이다.
@Test(expected = RuntimeException.class)
public void findUserByIdException(){
when(userRepository.findById("test011@test.com")).thenThrow(new RuntimeException("User not found"));
userService.findUserById("test011@test.com");
}
파라메터의 null 체크 같은 경우는 좀 생각을 해봐야 할것 같다. 전에는 null 체크는 무조건 메소드 내에서 한다라고 생각을 했었는데 그렇게 코드를 짜다보니 Controller 에서 이미 null 체크를 한 파라메터를 메소드 내부에서 또 체크하는 경우가 생겼다. 지금 생각하기에는 파라메터를 넘겨주기 전에 null 체크를 해야 할것 같다는 생각이 든다.
주의사항) 제 생각을 기준으로 작성하고 만든 소스코드이고 의견이기 때문에 틀린 부분이 있을수 있습니다.
'Development > Java' 카테고리의 다른 글
[Spring] SpringBoot log4j 라이브러리 바꾸다 삽질한일. (0) | 2021.12.14 |
---|---|
Spring Boot Test Case 작성에 대한 생각 - Controller Test (0) | 2021.02.18 |
Spring Boot Test Case 작성에 대한 생각 - Repository Test (0) | 2021.02.17 |
Spring Boot Data Jpa 를 사용한 Paging. (0) | 2019.11.11 |
[SpringBoot] @RequestBody 에 들어가는 Object 는 No-Argument Constructor 가 존재해야 한다. (0) | 2019.10.21 |