Table of Contents
						
						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());
    }
}