본문 바로가기
반응형

스프링23

[Spring] RepoLayer에서 assertThat과 assertAll 활용법 안녕하세요!오늘은 JPA Repository 테스트를 작성할 때리스트 반환 결과를 검증하는 방법과여러 조건을 한 번에 검증하는 방법에 대해 소개하려고 합니다. 😎 ✅ 1. 리스트 크기 검증 — hasSize()Repository 메서드 실행 후 반환된 결과가 리스트라면,리스트의 크기를 검증할 때 아래와 같이 사용합니다.assertThat(result).hasSize(0);결과가 비어있는 경우 (크기 = 0)를 확인하는 코드입니다.주로 실패 케이스나 데이터가 없을 때 검증할 때 자주 씁니다. ✅ 2. 여러 조건 한 번에 검증 — assertAll()결과값의 크기, 포함된 값 등 여러 조건을 한 번에 검증하려면assertAll() 을 활용하면 깔끔합니다. assertAll( () -> asse.. 2025. 3. 25.
[Spring] TDD Controller 변수가 RequestParam 이 많을때 컨트롤러를 테스트하면서 URL에 날짜 2개 와, 캠페인ID가 필요했습니다. 그러면 실패코드가 뭐 날짜가 누락된경우, 캠페인아이디가 누락된경우, 아무것도 없는경우 등등 모든경우를 다 하면 너무 많이 나옵니다. 이럴때 사용하는 것이 @ParameterizedTest@MethodSource 를 사용해주면 됩니다. 테스트 메서드에 다양한 입력값을 전달하며 여러번 실행 할 수 있게하며, 데이터는 외부 메서드 에서 생성되며 Stream API형식으로 반환됩니다.@ParameterizedTest@DisplayName("getCampaignDetails() : 파라미터 값 누락")@WithAuthUser@MethodSource("invalidGetCampaignDetailsUrl")void test(String url.. 2024. 12. 31.
[Spring] TDD 도입기(4) feat) Controller 계층 / Security provider검증 이번에는 JWT prodvider 쪽을 검증 해보겠습니다. 제 provider 에서는 1. 토큰을 생성2. 토큰을 검증3. 만료된 토큰 검증4. 유효하지 않은 토큰 검증 정도가 있습니다. 보통 Provider 쪽에 @Value("${jwt.secretKey}")private String secretKey;@Value("${jwt.expiration}")private Long expiration; 이 코드가 있기 때문에test 환경으로 바꿔주기 위해 @SpringBootTest(properties = "spring.profiles.active=test") 이것을 클래스 위에 선언해주시고application-test. yml 에jwt: secretKey: sad expiration: 30 처럼 작성해 주.. 2024. 12. 23.
[Spring] TDD 도입기(3) feat) Controller 계층 / Security 검증 이번에는 저번에 이어서 Controller 를 테스트 코드를 짜려고 합니다. 컨트롤러를 테스트하기 위해서는 HTTP 호출이 필요하다 스프링에서는 이를 위해서 MockMVC 를 제공하고 있습니다. @ExtendWith(MockitoExtension.class)@WebMvcTest(MemberController.class)public class MemberControllerTest { private MockMvc mockMvc; @MockBean private MemberService memberService; } MemberService에 가짜 객체 생성을 위해 MockBean을 사용해줍니다. 이제는 getMyEmailAndRole 를 위한 테스트 코드를 작성해주면 됩니다. 하지만 .. 2024. 12. 22.
[Spring] TDD 도입기(2) feat) Service 계층 이번에는 Servie 계층을 구현하려고 합니다. 우리 화면에서 이메일과, Role 을 헤더 부분에 보여주려고 합니다.앞에서 레포지토리 계층을 개발했던 것처럼 이번에도 서비스 계층에 대한 테스트 클래스부터 작성해 주면 됩니다.. 서비스 테스트 만들기 맥북 기준 cmd + shift + t 입니다. 근데 원래는 서비스 클래스를 만드는것보다 서비스 테스트코드를 먼저 짜야하기 때문에 순서가 바뀌었지만.클래스명만 만들고 만드는것도 나쁘지 않은거 같습니다.  왜냐하면 폴더 위치까지 다 알아서 만들어 주기 때문이죠 서비스 계층은 데이터 베이스에 데이터를 처리하는 Repo 계층을 모킹하기 위해 MockitoExtension 에서 실행 되도록 합니달. Mockito 도 테스팅 프로임 워크이기 떄문에 JUnit 과 결합되.. 2024. 12. 22.
[Spring] TDD 도입기(1) feat) Repo Layer 이번에 그로우 업 프로젝트를 진행하면서 같이 프로젝트를 하는 친구와 TDD를 도입 해보도록 하였습니다. TDD 는 테스트 주도 개발이라고 합니다. 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현합니다. 실패하는 테스트 코드를 작성할 때까지 실제 코드를 작성하지 않는 것과, 실패하는 테스트를 통과할 정도의 최소 실제 코드를 작성해야 하는 것입니다. 이를 통해 실제 코드에 대해 기대되는 바를 보다 명확하게 정의함으로써 불필요한 설계를 피할 수 있고, 정확한 요구사항에 집중할 수 있습니다. TDD 의 효과로 디버깅 시간을 단축하고, 작성한 코드가 가지는 불안정성을 개선해 생산성을 높일 수 있습니다. 보통 테스트를 위해 JUni.. 2024. 12. 21.
반응형