10개 프로젝트 자바스프링

0221 패캠챌린지

Laftel 2023. 2. 21. 13:49
반응형

 

 

객체지향 패러다임

자바 단위 테스팅 프레임워크

JUnit5 사용

https://junit.org/junit5/docs/current/user-guide/#writing-tests

AssertJ

  • 테스트 코드 가독성을 높여주는 자바 라이브러리

https://assertj.github.io/doc/#assertj-core-assertions-guide

테스트 코드를 작성하는 이유?

1. 문서화 역할

2. 코드에 결함을 발견하기 위함

3. 리팩토링 시 안정성 확보

4. 테스트 하기 쉬운 코드를 작성하다 보면 더 낮은 결합도를 가진 설계를 얻을 수 있음

TDD

  • Test Driven Development (테스트 주도 개발)
  • 프로덕션 코드보다 테스트 코드를 먼저 작성하는 개발 방법
  • 기능 동작을 검증 (메서드 단위)

BDD

  • Behavior Driven Development (행위 주도 개발)
  • 행위에 대한 테스트 코드를 작성하는 개발 방법
  • 유저 시나리오 동작을 검증 (시나리오 단위)
  • 하나의 시나리오는 Given, When, Then 구조를 가짐

요구사항

  • 비밀번호는 최소 8자 이상 12자 이하여야 한다.
  • 비밀번호가 8자 미만 또는 12자 초과인 경우 IllegalArgumentException 예외를 발생 시킨다.
  • 경계조건 대해 테스트 코드를 작성해야 한다.

 

PasswordValidatorTest.java

package org.example;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode;

public class PasswordValidatorTest {
    /**
     * 비밀번호는 최소 8자 이상 12자 이하여야 한다.
     * 비밀번호가 8자 미만 또는 12자 초과인 경우 IllegalArgumentException 예외를 발생시킨다.
     * 경계조건에 대해 테스트 코드를 작성해야 한다.
     */
    @DisplayName("비밀번호가 최소 8자 이상, 12자 이하면 예외가 발생하지 않는다.")
    @Test
    void validatePasswordTest() {
        // given
        String password = "serverwizard";
        PasswordValidator passwordValidator = new PasswordValidator();

        // when, then
        assertThatCode(() -> passwordValidator.validate(password))
                .doesNotThrowAnyException();
    }

    @DisplayName("비밀번호가 8자 미만 또는 12자 초과하는 경우 IllegalArgumentException 예외가 발생한다.")
    @ParameterizedTest
    @ValueSource(strings = {"aabbcce", "aabbccddeeffg"})
    void validatePasswordTest2(String value) {
        // given
        PasswordValidator passwordValidator = new PasswordValidator();

        // when, then
        assertThatCode(() -> passwordValidator.validate(value))
                .isInstanceOf(IllegalArgumentException.class)
                .hasMessage("비밀번호는 최소 8자 이상 12자 이하여야 한다.");
    }

    /**
     * 테스트 하기 쉬운 코드를 작성하다 보면 더 낮은 결합도를 가진 설계를 얻을 수 있다.
     */
    @DisplayName("비밀번호가 최소 8자 이상, 12자 이하면 예외가 발생하지 않는다.")
    @Test
    void validatePasswordTest2() {
        // given
        PasswordValidator passwordValidator = new PasswordValidator();

        // when, then
        assertThatCode(() -> passwordValidator.validate2(new CorrectPasswordGenerator()))
                .doesNotThrowAnyException();
    }


    @DisplayName("비밀번호가 8자 미만 또는 12자 초과하는 경우 IllegalArgumentException 예외가 발생한다.")
    @Test
    void validatePasswordTest3() {
        // given
        PasswordValidator passwordValidator = new PasswordValidator();

        // when, then
        assertThatCode(() -> passwordValidator.validate2(new WrongPasswordGenerator()))
                .isInstanceOf(IllegalArgumentException.class)
                .hasMessage("비밀번호는 최소 8자 이상 12자 이하여야 한다.");
    }
}

 

 

#패스트캠퍼스 #패캠챌린지 #수강료0원챌린지 #직장인인강 #직장인자기계발
#패캠인강후기 #패스트캠퍼스후기 #환급챌린지 #오공완 #10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) 초격차 패키지 Online.

 

 필수 링크 : http://bit.ly/3Y34pE0

반응형