JUnit5 단위 테스트(Unit Test)

By | 2022년 6월 22일
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());
    }
}

답글 남기기