본문 바로가기
Side Project/To do List API

TodoController 테스트 코드

by BellOne4222 2024. 2. 3.

 

create() 테스트 코드

@Test
	void create() throws Exception{
		// Mock 객체를 사용하여 todoService.add 호출 시 예상된 TodoEntity를 반환하도록 설정
		when(this.todoService.add(any(TodoRequest.class))).then((i) -> {
			TodoRequest request = i.getArgument(0, TodoRequest.class);
			return new TodoEntity(this.expected.getId(), request.getTitle(), this.expected.getOrder(),
				this.expected.getCompleted());
		});

		// 테스트를 위한 TodoRequest 객체 생성 및 JSON 형식으로 변환
		TodoRequest request = new TodoRequest();
		request.setTitle("ANY TITLE");

		ObjectMapper mapper = new ObjectMapper();
		String content = mapper.writeValueAsString(request);

		// POST 요청 수행 및 응답 확인
		this.mvc.perform(post("/")
				.contentType(MediaType.APPLICATION_JSON)
				.content(content))
			.andExpect(status().isOk())
			.andExpect(jsonPath("$.title").value("ANY TITLE"));
	}

 

 

readOne() 테스트 코드

@Test
    void readOne() throws Exception {
        // Mock 객체를 사용하여 todoService.searchById 호출 시 예상된 TodoEntity를 반환하도록 설정
        given(todoService.searchById(123L)).willReturn(expected);

        // GET 요청 수행 및 응답 확인
        mvc.perform(get("/123"))
            .andExpect(status().isOk())
            .andExpect(content().contentType(MediaType.APPLICATION_JSON))
            .andExpect(jsonPath("$.id").value(expected.getId()))
            .andExpect(jsonPath("$.title").value(expected.getTitle()))
            .andExpect(jsonPath("$.order").value(expected.getOrder()))
            .andExpect(jsonPath("$.completed").value(expected.getCompleted()));
    }

 

전체 테스트 코드

 

package com.example.controller;

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.BDDMockito.*;
import static org.mockito.Mockito.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;

import com.example.model.TodoEntity;
import com.example.model.TodoRequest;
import com.example.service.TodoService;
import com.fasterxml.jackson.databind.ObjectMapper;

@WebMvcTest(TodoControllerTest.class)
class TodoControllerTest {

    @Autowired
    MockMvc mvc;

    @MockBean
    TodoService todoService;

    private TodoEntity expected;

    @BeforeEach
    void setup(){
        // 테스트 전에 사용할 예상 TodoEntity 객체 초기화
        this.expected = new TodoEntity();
        this.expected.setId(123L);
        this.expected.setTitle("TEST TITLE");
        this.expected.setOrder(0L);
        this.expected.setCompleted(false);
    }

    @Test
    void create() throws Exception{
        // Mock 객체를 사용하여 todoService.add 호출 시 예상된 TodoEntity를 반환하도록 설정
        when(this.todoService.add(any(TodoRequest.class))).then((i) -> {
            TodoRequest request = i.getArgument(0, TodoRequest.class);
            return new TodoEntity(this.expected.getId(), request.getTitle(), this.expected.getOrder(),
                this.expected.getCompleted());
        });

        // 테스트를 위한 TodoRequest 객체 생성 및 JSON 형식으로 변환
        TodoRequest request = new TodoRequest();
        request.setTitle("ANY TITLE");

        ObjectMapper mapper = new ObjectMapper();
        String content = mapper.writeValueAsString(request);

        // POST 요청 수행 및 응답 확인
        this.mvc.perform(post("/")
                .contentType(MediaType.APPLICATION_JSON)
                .content(content))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.title").value("ANY TITLE"));
    }

    @Test
    void readOne() throws Exception {
        // Mock 객체를 사용하여 todoService.searchById 호출 시 예상된 TodoEntity를 반환하도록 설정
        given(todoService.searchById(123L)).willReturn(expected);

        // GET 요청 수행 및 응답 확인
        mvc.perform(get("/123"))
            .andExpect(status().isOk())
            .andExpect(content().contentType(MediaType.APPLICATION_JSON))
            .andExpect(jsonPath("$.id").value(expected.getId()))
            .andExpect(jsonPath("$.title").value(expected.getTitle()))
            .andExpect(jsonPath("$.order").value(expected.getOrder()))
            .andExpect(jsonPath("$.completed").value(expected.getCompleted()));
    }
}

'Side Project > To do List API' 카테고리의 다른 글

TodoService 테스트 코드  (0) 2024.02.03
Front Test  (0) 2024.02.03
컨트롤러 구현  (0) 2024.02.03
서비스 코드 구현  (0) 2024.02.03
repository 구현  (0) 2024.02.02