패스트캠퍼스 챌린지

패스트캠퍼스 환급 챌린지 29일차 : 9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online 강의 후기

ssoonearth 2025. 4. 29. 23:08

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

 

테스트 코드 작성 화면. 아직 기능 구현을 하지 않았기 때문에 테스트 실패라고 뜬다.

 

 

 

패스트캠퍼스의 '9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online' 강의 수강 29일차!
오늘은 커뮤니티 피드 서비스의 로그인 기능의 테스트를 구현하는 작업을 진행하였다.

 

jwt를 이용하여 token 기반의 로그인 방식을 구현하기로 하였기에, build.gradle 파일에 로그인 기능 구현을 위한 jwt 라이브러리 의존성을 추가해주었다.

dependencies {
    // jwt
    implementation("io.jsonwebtoken:jjwt-api:0.12.6")
    implementation("io.jsonwebtoken:jjwt-impl:0.12.6")
    runtimeOnly("io.jsonwebtoken:jjwt-gson:0.12.6")
}

 

 

로그인 인수 테스트는 이메일과 패스워드를 통해 미리 가입을 진행한 후에 로그인이 유효한지 확인을 할 수 있다.

테스트에 필요한 데이터를 생성하는 DataLoader의 loadData()에서는 원래 그냥 유저 생성만 진행되고 있었다.

이 부분을 인증 기능까지 있는 유저 생성 코드로 수정하여서 인증까지 완료된 유저를 생성할 수 있도록 하였다.

public void loadData() {
    // user 1, 2, 3 생성
    for (int i = 1; i < 4; i++) {
        createUser("user" + i + "@test.com");
    }

    followUser(new FollowUserRequestDto(1L, 2L));
    followUser(new FollowUserRequestDto(1L, 3L));
}

public void createUser(String email) {
    requestSendEmail(new SendEmailRequestDto(email));
    String token = getEmailToken(email);
    requestVerifyEmail(email, token);
    registerUser(new CreateUserAuthRequestDto(email, "password", "USER", "name", ""));
}

 

 

인수 테스트 주도 개발으로 작업을 진행하기 때문에, 기능을 구현하기 전에 먼저 테스트를 구현해주었다.

정상적인 로그인 상황, 잘못된 비밀번호로 로그인한 상황에 대한 테스트 코드를 작성하였다.

@Test
void givenEmailAndPassword_whenLogin_thenReturnToken() {
    // given
    LoginRequestDto dto = new LoginRequestDto(email, "password");

    // when
    String token = requestLoginGetToken(dto);

    // then
    assertNotNull(token);
}

@Test
void givenEmailAndWrongPassword_whenLogin_thenReturnCodeNotZero() {
    // given
    LoginRequestDto dto = new LoginRequestDto(email, "wrong password");

    // when
    Integer code = requestLoginGetResponseCode(dto);

    // then
    assertEquals(400, code);
}

 

 

 

위에서 작성했다시피, acceptance 테스트 전체에 적용되는 loadData() 부분을 수정했는데도 테스트 실행시에 아무런 문제가 없는 것이 정말 놀라웠다.

다른 코드에 영향을 주지 않기 위해서는 객체지향적으로 구조를 잘 설계하면 된다는 것을 다시 한번 실감하게 되었다.