주니어 개발자의 테스트 코드 이해하기
·
Spring/테스트 코드
테스트 코드의 기초와 중요성을 알아보자 📌 서론 스프링부트로 백엔드 개발을 하다 보면 테스트 코드를 작성해야 한다는 말을 정말 많이 듣게 된다. 그래서 테스트 코드가 뭐길래 이렇게까지 얘기를 하는 걸까? 테스트 코드를 작성하기 전에 테스트 코드가 무엇인지와 어떤 tool을 사용해서 작성하는지에 대해서 간단히 이해해 보자 1. 테스트 코드의 중요성 테스트 코드는 개발 과정에서 매우 중요하다. 이를 통해 버그를 조기에 발견하고 소프트웨어의 안정성을 확보할 수 있다. 특히 스프링 부트에서는 다양한 도구와 라이브러리를 제공하여 테스트 코드 작성을 쉽게 해 준다. 이런 도구들을 사용함으로써, 개발자는 애플리케이션의 다양한 부분을 효율적으로 검증할 수 있고, 결과적으로 코드의 품질을 높일 수 있다. 또한, 테스트 ..
[스프링, 스프링 부트] Spring test - when()에서 발생한 에러
·
Spring/테스트 코드
Pageable 테스트를 진행하던중 에러가 발생했다. 1. 에러가 발생한 코드 확인 when(boardService.selectAllBoardList(pageable)).thenReturn(boardDtoPage); 에러 메시지는 NullPointerException이었다. 이건 when(boardService.selectAllBoardList(pageable)).thenReturn(boardDtoPage); 부분에서 모의 객체의 동작을 설정할 때 문제가 발생한 것이다. 모의 객체의 동작을 when()또는 given()으로 설정할 때, 메서드 호출에 사용되는 인자가 정확히 일치해야 한다. Pageable 인스턴스는 동일한 페이지 번호와 페이지 크기를 가지더라도 다른 인스턴스일 수 있으므로, 이로 인해 문..
[스프링, 스프링부트] Spring test - 스프링 시큐리티의 authentication객체를 어떻게 사용해야 할까?
·
Spring/테스트 코드
Controller 테스트를 하면서 시큐리티의 authentication객체를 매게변수로 받아서 사용하도록 작성한 메서드에서 많은 고민을 하게되었다. 왜냐하면 테스트를 위해 이 객체를 주입해줘야 했기 때문이다. 그래서 어떻게 해결할지 고민을 했다. 1. 먼저 커스텀 Annotation을 만들어서 사용해보자는 결심이 들었다. 1-1. config 패키지에 annotation 패키지를 생성한다. 1-2. annotation패키지에 아래의 클래스들을 생성한다 InjectAuthentication - 어노테이션 클래스 /** * 시큐리티 authentication을 주입하는 커스텀 annotation */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.MET..
[스프링, 스프링부트] Spring test - 테스트 코드의 기초(5) [CRUD 테스트]
·
Spring/테스트 코드
이번 포스트에서는 CRUD 테스트를 작성해 보자 1. GET 테스트 이 테스트에서는 GET 요청을 사용하여 특정 사용자를 가져오는 API를 테스트한다. 우선 userService.findUserById() 메소드를 모킹하여 항상 동일한 사용자 정보를 반환하도록 한다. 그 후에 mockMvc.perform()을 사용하여 GET 요청을 보내고, andExpect()를 통해 응답 상태와 응답 본문이 예상된 값과 일치하는지 검증한다. @Test public void testGetUser() throws Exception { User user = new User("john", "doe", "john.doe@gmail.com"); Mockito.when(userService.findUserById(anyLong()..
[스프링, 스프링 부트] Spring test - 테스트 코드의 기초(4) [mock 테스트]
·
Spring/테스트 코드
이번 포스트에서는 저번에 이어 mock을 사용한 테스트 설명을 추가적으로 이어간다. 1. Mockito.mock 사용방법 > mock으로 모의객체 생성 Mockito.mock은 Mockito 라이브러리에서 제공하는 기능 중 하나로, 모의 객체(Mock Object)를 생성하는 데 사용된다. 모의 객체는 실제 객체의 동작을 흉내 내는 가짜 객체로, 테스트 시에 실제 객체를 대체하여 테스트를 수행할 수 있도록 도와준다. Mockito.mock 메서드를 사용하면 인터페이스, 추상 클래스 또는 클래스의 인스턴스를 가짜 객체로 만들 수 있다. 가짜 객체는 실제 객체의 메서드를 호출할 수 있으며, Mockito를 사용하여 원하는 동작을 정의할 수 있다. 가짜 객체는 실제 객체와 동일한 인터페이스를 가지므로 테스트 ..
[스프링, 스프링 부트] Spring test - 테스트 코드의 기초(3) [Mockito.when() 메서드]
·
Spring/테스트 코드
이번 포스트에서는 스프링에서 테스트 코드를 작성하는 예시를 설명한다. 1. API 테스트 API 테스트는 서버가 API 요청에 대해 예상된 응답을 반환하는지 확인하기 위해 작성된다. 이를 위해 MockMvc를 사용하여 가상의 API 요청을 보내고 응답을 검증하는 방법을 주로 사용한다. MockMvc는 post(), get(), put(), delete() 등의 HTTP 메소드를 사용하여 요청을 전송하고, andExpect()를 통해 응답을 검증한다. 예시 코드는 MockMvc를 사용하여 API 요청을 보내고 응답 상태를 검증하는 테스트이다. 여기서 mockMvc.perform() 부분은 API 요청을 보내는 부분이고, andExpect(status().isNotFound()) 부분은 응답 상태를 검증하는..
[스프링, 스프링 부트] Spring test - 테스트 코드의 기초(2) [MockMvc, MockBean]
·
Spring/테스트 코드
이번 포스트에서는 저번 포스트에 이어서 테스트 코드의 용어 설명을 진행하겠다. 1. MockMvc란 MockMvc는 Spring Test Library에서 제공하는 한 클래스로서, 웹 서버를 따로 구동시키지 않아도 Spring MVC의 동작을 모방(mock)하도록 도와준다. 이를 통해 Controller가 정상적으로 동작하는지 테스트할 수 있다. 1-1. MockMvc 설정하기 MockMvc 인스턴스는 @WebMvcTest나 MockMvcBuilders를 통해 생성할 수 있다. @WebMvcTest(controllers = MyController.class) public class MyControllerTest { @Autowired private MockMvc mockMvc; } 위의 코드에서 @Web..