Spring Boot 테스트 코드 작성하기-Controller

mjun·2022년 10월 1일
0

회사에서 테스트 코드 없이 업무를 진행하다가 갑자기 메소드 자체가 사라졌지만 알아채지 못하고 배포가 될 뻔한 상황이 있었습니다. 그 일 이후로 TDD방식이 아니여도 하나 하나 테스트 코드를 써보며 공부하기로 했고 혼자 찾아보며 작성해 본 내용 입니다.

@RestController
@RequestMapping({"/cafe"})
public class CafeInfoController{
	
    @GetMapping("/categoryList")
	public String categoryList(@RequestParam(value = "store_code",required = false,defaultValue = "") String store_code){
    
        if (store_code.equals("")) {
			return "not found store_code";
		} else {
			return "store_code"+store_code;
        }
		
	}
}

get방식으로 "/cafe/categoryList" URL을 호출 하면 Stroe_code의 값이 잘 넘어 오는지에 대한 컨트롤러입니다. 이후에 test 폴더에 작성한 테스트 코드를 작성하였습니다.

@RunWith(SpringRunner.class) //스프링 테스트시 필요한 어노테이션
@WebMvcTest(CafeInfoController.class) //특정 Controller만 테스트 할려는 어노테이션
public class CafeControllerTest {

	// 스프링 MVC 테스트의 시작점. GET/POST에 대한 API 테스트 의존성 주입
	@Autowired 
	private MockMvc mvc;

	@Autowired
	public CafeInfoController cafeInfoController;
    
	@Before
	public void createController(){
		mvc = MockMvcBuilders.standaloneSetup(cafeInfoController).build();
	}

	@DisplayName("카테고리 리스트 조회")
	@Test
	public void categoryListControllerTest() throws Exception {
		RequestBuilder reqbuild = MockMvcRequestBuilders.get("/order/cafeCategoryList").param("store_code","0100004");
		//given
		// store_code =0100004
		//when
		mvc.perform(reqbuild)
		//then
		.andExpect(status().isOk()).andDo(print()); // 결과 출력;
	}
}

MockMvc는 애플리케이션 배포를 진행하지 않아도 서버의 MVC동작을 할 수 있게 해주는 라이브러리입니다. MockMvc를 설정할려면 MockMvcBuilders 사용해야하고 이것은 @Before 어노테이션을 이용해 테스트코드 실행 전에 실행이 가능하도록 설정하였습니다.

MockMvc의 perform메소드를 이용해 컨트롤러를 실행 시키고 통신 상태가 200으로 떨어지는지에 대한 내용과 그 결과를 출력 시키도록 만들었습니다.

이후 MockMvcRequestBuilders.get를 이용해 테스트할 URL과 파라미터 값을 설정해주고 테스트를 진행하였습니다.

--스토어 파라미터 값을 설정해 주었을때의 결과--

--스토어 파라미터 값이 빈값일 경우--

이렇게 다른 결과 값이 나옵니다.

profile
꾸준함이 무기가 되기 위한 노력

0개의 댓글