TIL

(2024-05-20) Junit,Mockito

o_coding 2024. 5. 20. 20:52
class TodoServiceTest {
@Mock
TodoRepository todoRepository;

@InjectMocks
TodoService todoService;

@Test
@DisplayName("할일을 등록하는 로직 테스트 ")
public void testCreateTodo(){
TodoRequestDto todoRequestDto = new TodoRequestDto();
todoRequestDto.setTitle("Test Title");
todoRequestDto.setContents("Test Contents");
todoRequestDto.setManager("dhgudtjr6635@naver.com");
todoRequestDto.setPassword("1357");

Todo todo = new Todo(todoRequestDto);

when(todoRepository.save(any(Todo.class))).thenReturn(todo);

ApiResponse<TodoResponseDto> response = todoService.createTodo(todoRequestDto);

assertNotNull(response.getData());
System.out.println("Pass");
assertEquals(HttpStatus.OK,response.getStatus());
System.out.println("Pass");
assertEquals(todo.getId() , response.getData().getId());
System.out.println("Pass");
assertEquals(todo.getTitle(),response.getData().getTitle());
System.out.println("Pass");
assertEquals(todo.getContents(),response.getData().getContents());
System.out.println("Pass");
assertEquals(todo.getManager(),response.getData().getManager());
System.out.println("Pass");
verify(todoRepository , times(1)).save(any(Todo.class));
}
@Test
@DisplayName("조회 하는 로직 테스트 ")
public void testInquireTodo(){
Long id = 1L;
Todo todo = new Todo();
when(todoRepository.findById(id)).thenReturn(Optional.of(todo));

ApiResponse<TodoResponseDto> response = todoService.inquireTodo(id);

assertNotNull(response.getData(),"Response data should not null");
assertEquals(HttpStatus.OK,response.getStatus(),"Response data should be OK");

verify(todoRepository,times(1)).findById(id);
}
@Test
@DisplayName("전체조회 로직 테스트")
public void testInquireTodoList(){
Todo todo1 = new Todo();
Todo todo2 = new Todo();
List<Todo> todoList = Arrays.asList(todo1,todo2);
when(todoRepository.findAllByOrderByModifiedAtDesc()).thenReturn(todoList);
ApiResponse<List> response = todoService.getTodo();

assertNotNull(response.getData(), "Response data should not be null");
}

@Test
@DisplayName("수정 NotFound 테스트")
public void testUpdateTodoNotFound(){
TodoRequestDto todoRequestDto = new TodoRequestDto();

Long id = 1L;

when(todoRepository.findById(id)).thenReturn(Optional.empty());

ApiResponse<Long> response = todoService.updateTodo(todoRequestDto,id);

assertEquals(HttpStatus.NOT_FOUND,response.getStatus());
}

 

mockito를 사용해서 모의 객체를 만들어 테스트를 해보았다. 업데이트 부분 구현중에 옵셔널 문제가 있었는대 옵셔널이 null값을 가지면 안되는 것같다. 값이없음을 나타낼때는 empty() 를 사용하고 확인할 때는 isPresent를 사용하는 것 같다.