dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-rest'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
compileOnly 'org.projectlombok:lombok:1.18.20'
annotationProcessor 'org.projectlombok:lombok:1.18.20'
//test에 필요한 코드
testImplementation('org.springframework.boot:spring-boot-starter-test')
}
package org.example.service;
import org.example.model.TodoEntity;
import org.example.model.TodoRequest;
import org.example.repository.TodoRepository;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.AdditionalAnswers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.web.server.ResponseStatusException;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class TodoServiceTest {
@Mock
private TodoRepository todoRepository;
@InjectMocks
private TodoService todoService;
@Test
void add() {
//todoRepository가 save매소드를 호출해서 TodoEntity 값을 받으면 받은 Entity값을 리턴
when(this.todoRepository.save(any(TodoEntity.class)))
.then(AdditionalAnswers.returnsFirstArg());
TodoRequest expected = new TodoRequest();
expected.setTitle("Test Title");
TodoEntity actual = this.todoService.add(expected);
//넣은 값과 실제로 반환되는 값이 일치하는 지 확인
assertEquals(expected.getTitle(), actual.getTitle());
}
@Test
void searchById() {
TodoEntity entity = new TodoEntity();
entity.setId(123L);
entity.setTitle("TITLE");
entity.setOrder(0L);
entity.setCompleted(false);
//Optinal로 매핑
Optional<TodoEntity> optional = Optional.of(entity);
//어떤 값이든 아이디 값이 주어졌을 때, optinal값을 리턴
given(this.todoRepository.findById(anyLong()))
.willReturn(optional);
TodoEntity actual = this.todoService.searchById(123L);
TodoEntity expected = optional.get();
assertEquals(expected.getId(), actual.getId());
assertEquals(expected.getTitle(), actual.getTitle());
assertEquals(expected.getOrder(), actual.getOrder());
assertEquals(expected.getCompleted(),actual.getCompleted());
}
@Test
public void searchByIdFailed(){
given(this.todoRepository.findById(anyLong()))
.willReturn(Optional.empty());
assertThrows(ResponseStatusException.class, () ->{
this.todoService.searchById(123L);
});
}
}
assertEquals함수를 이용하여 예상한 값과 실제 값이 일치하는 지 확인
실행 결과
-> 테스트 통과