단위테스트

    단위 테스트 - Controller (feat. 추가적인 단위 테스트의 방향성)

    [사용 스택]- Spring Boot 3.x- Java 17- Spring data JPA- H2- Junit 5- mockito  이번 글에서는 Controller의 단위테스트를 작성한 방법을 소개하겠습니다.들어가기에 앞서서,저는 Rest Controller를 사용하여 REST API를 만들었습니다. Controller컨트롤러의 역할은 HTTP 요청에 대한 비즈니스 로직 호출과 적절한 응답을 해주는 것입니다.저는 RestControllerAdvice를 사용해서 전역에서 발생된 예외에 맞게 응답 데이터를 생성해 주도록 했습니다.따라서, 제가 작성한 컨트롤러에서는 성공적인 응답만을 반환해줍니다.또한, 통일된 응답 데이터를 만들기 위해서 ResponseDTO 를 만들어 두었습니다.@AllArgsConstru..

    단위 테스트 - Service (feat. 테스트 더블)

    [사용 스택]- Spring Boot 3.x- Java 17- Spring data JPA- H2- Junit 5- mockito 레포지토리 테스트에 이어서 서비스에서 단위 테스트를 작성한 방법을 소개하겠습니다. Service서비스의 역할은 레포지토리를 사용하여 데이터를 요청하고 가져온 데이터로 비즈니스 로직을 수행하는 것입니다.서비스를 테스트하기 위해서는 레포지토리를 주입받아야 하는데,이 레포지토리가 실제 의존성을 주입받아 사용된다면,서비스를 테스트하는 단위 테스트라고 말하기 어렵습니다.(오히려 서비스와 레포지토리 모두를 한 번에 테스트하는 통합 테스트라고 생각합니다.)그렇기 때문에 레포지토리의 의존성을 줄여줄 필요가 있습니다.이를 위해 테스트 더블(Test Double)을 사용할 것입니다!! 테스트 ..

    단위 테스트 - Repository (feat. 테스트 픽스쳐)

    [사용 스택]- Spring Boot 3.x- Java 17- Spring data JPA- H2- Junit 5- mockito  기존에 진행했던 프로젝트를 혼자서 리팩터링 하기로 했습니다.리팩터링을 진행하면서 기존의 비즈니스 로직을 헤치는 일이 생기지 않도록테스트 코드를 작성할 필요가 있었습니다.또한, SpringBootTest를 사용하는 것은 전체를 부팅하면서 시간이 오래 걸린다는 단점이 있어서 단위 테스트에는 적합하지 않다고 생각하고 다른 것들로 대체해서 사용했습니다.테스트 코드를 작성하는 순서는 다른 클래스들과의 의존성이 가장 낮은 레포지토리부터서비스, 컨트롤러 순으로 했습니다. Repository레포지토리 테스트는 @DataJpaTest 를 사용했습니다.이를 사용하면 Jpa 테스트에 필요한 빈..