Table of Content
JUnit5 단위 테스트(Unit Test)
Mock(모조품) 을 이용한 단위 테스트 방법을 정리합니다.
build.gradle
dependencies {
// Spring Boot 2.2 이상인 경우 JUnit5 가 추가된다.
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
Repository
@SpringBootTest
를 붙여줌으로 해서,
테스트용 데이타베이스에 접속해서,
데이타를 가져옵니다.
(DB 가 구축되어 있어야 합니다.)
@SpringBootTest
class LogisticsSongjangLogRepositoryTest {
@Autowired
private LogisticsSongjangLogRepository repository;
@Test
void findTopByOrderserial() {
// given
// when
List<LogisticsSongjangLog> list = repository.findTopByOrderserial("22061498879");
// then
Assertions.assertEquals(list.size(), 1);
LogisticsSongjangLog item = list.get(0);
Assertions.assertEquals(item.getOrderserial(), "22061498879");
}
}
Service
given().willReturn() 형식으로 Mock 의 리턴값을 정해 놓으면,
Repository 레이어 없이 Service 레이어만 테스트할 수 있다.
import static org.mockito.BDDMockito.given;
@ExtendWith(MockitoExtension.class)
class LogisticsSongjangLogServiceTest {
@Mock
private LogisticsSongjangLogRepository repository;
@InjectMocks
private LogisticsSongjangLogService service;
@Test
void getNotSendSongjangLogLotte() {
// given
given(repository.GetNotSendSongjangLogLotte()).willReturn(new ArrayList<>());
// when
List<LogisticsSongjangLogDto> res = service.GetNotSendSongjangLogLotte();
// then
Assertions.assertNotNull(res);
}
@Test
void setIsuploadedToY() {
// given
List<LogisticsSongjangLog> list = new ArrayList<>();
list.add(new LogisticsSongjangLog());
given(repository.findTopByOrderserial(any())).willReturn(list);
// when
boolean res = service.setIsuploadedToY("1111");
// then
Assertions.assertTrue(res);
}
}
Controller
@WebMvcTest(LogisticsSongjangLogController.class)
class LogisticsSongjangLogControllerTest {
@MockBean
private LogisticsSongjangLogService service;
@MockBean
private LotteApiService apiService;
@Autowired
private MockMvc mockMvc;
@Test
void sendSongjangLog() throws Exception {
// given
given(service.GetNotSendSongjangLogLotte()).willReturn(new ArrayList<>());
given(apiService.sendSongjangLog(any())).willReturn(true);
// when
MvcResult result = mockMvc.perform(MockMvcRequestBuilders
.get("/v1/lotte/sendsongjanglog/")
// .param("productId", productId)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andReturn();
// then
Assertions.assertEquals(HttpStatus.OK.value(), result.getResponse().getStatus(), "Incorrect Response Status");
System.out.println(result.getResponse().getContentAsString());
}
}