inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

워밍업 클럽 3기 BE 클린코드&테스트 - 3주차 발자국

김경환
0

회고

3주차 발자국을 4주차 작성 이후에 쓰게 됐습니다. 제가 놓치고 작성하지 못한터라 아쉽게만 여기고 있었는데 기회를 주셔서 감사합니다.

이번 3주차 수업은 실습에 높은 비중을 두고 진행됐습니다. 우빈님의 잘 정리된 프레젠테이션과 함께하는 이론 수업도 좋지만 실습은 실습만의 매력이 있습니다. 가령 이론 수업에서 배웠던 것들이 실제로 어떤 식으로 활용되는지 좀 더 구체적으로 알 수 있어서 좋았습니다. 이론으로 시작하는 추상적인 내용들이 실습을 통해 바로바로 구체적으로 변환되는 과정은 정말 유익하네요.

특히 테스트 코드에 대해선 정말 감동이었습니다. 예전에 테스트 코드를 작성을 시도해본 적이 있었습니다만, 적은 리퍼런스, 어려운 테스트 프레임워크 앞에서 좌절한 경험이 있었습니다. 우빈님의 강의를 들으며 다시 시도해보니, 이렇게 쉬웠던 일인가 싶을 정도로 테스트 코드에 자신감이 붙고 있습니다.

 

강의 내용 요약

레이어드 아키텍처와 테스트

 

Library vs Framework

Spring의 특징

JPA (Java Persistence API)

ORM

Persistence Layer

Business Layer

Presentation Layer

 

미션

Day 11

미션 설명

[Readable Code] 강의의 두 프로젝트(지뢰찾기, 스터디카페) 중 하나를 골라, 단위 테스트를 작성해 봅시다. 조건은 아래와 같습니다.

나의 답

class StudyCafePassTypeTest {
    @DisplayName("시간 단위 이용권은 라커 타입이 아니다.")
    @Test
    void HourlyPassTypeIsNotLockerType() {
        // given
        StudyCafePassType passType = StudyCafePassType.HOURLY;

        // when
        boolean isLockerType = passType.isLockerType();
        boolean isNotLockerType = passType.isNotLockerType();

        // then
        assertThat(isLockerType).isFalse();
        assertThat(isNotLockerType).isTrue();
    }

    @DisplayName("주 단위 이용권은 라커 타입이 아니다.")
    @Test
    void WeeklyPassTypeIsNotLockerType() {
        // given
        StudyCafePassType passType = StudyCafePassType.WEEKLY;

        // when
        boolean isLockerType = passType.isLockerType();
        boolean isNotLockerType = passType.isNotLockerType();

        // then
        assertThat(isLockerType).isFalse();
        assertThat(isNotLockerType).isTrue();
    }

    @DisplayName("1인 고정석은 라커 타입이다.")
    @Test
    void FixedPassTypeIsLockerType() {
        // given
        StudyCafePassType passType = StudyCafePassType.FIXED;

        // when
        boolean result1 = passType.isLockerType();
        boolean result2 = passType.isNotLockerType();

        // then
        assertThat(result1).isTrue();
        assertThat(result2).isFalse();
    }
}
class StudyCafeSeatPassTest {
    @DisplayName("인스턴스 생성 시 주입했던 passType, duration, price을 그대로 반환한다.")
    @Test
    void get() {
        // given
        StudyCafePassType passType1 = StudyCafePassType.HOURLY;
        int duration1 = 2;
        int price1 = 6500;
        double discountRate1 = 0.0;

        StudyCafeSeatPass studyCafeSeatPass = StudyCafeSeatPass.of(passType1, duration1, price1, discountRate1);

        // when
        StudyCafePassType passType2 = studyCafeSeatPass.getPassType();
        int duration2 = studyCafeSeatPass.getDuration();
        int price2 = studyCafeSeatPass.getPrice();

        // then
        assertThat(passType1).isEqualTo(passType2);
        assertThat(duration1).isEqualTo(duration2);
        assertThat(price1).isEqualTo(price2);
    }

    @DisplayName("이용권 타입과 이용 기간이 좌석 이용권과 같은 라커 이용권일 경우 true를 반환한다.")
    @Test
    void isSameDurationType() {
        // given
        StudyCafePassType passType = StudyCafePassType.FIXED;
        int duration = 4;
        int price = 250000;
        double discountRate = 0.1;

        StudyCafeSeatPass studyCafeSeatPass = StudyCafeSeatPass.of(passType, duration, price, discountRate);
        StudyCafeLockerPass studyCafeLockerPass = StudyCafeLockerPass.of(passType, duration, price);

        // when
        boolean isSameDurationType = studyCafeSeatPass.isSameDurationType(studyCafeLockerPass);

        // then
        assertThat(isSameDurationType).isTrue();
    }

    @DisplayName("이용권의 할인율이 적용된 가격을 반환한다.")
    @Test
    void test() {
        // given
        StudyCafePassType passType = StudyCafePassType.FIXED;
        int duration = 4;
        int price = 250000;
        double discountRate = 0.1;
        int expectedDiscountPrice = (int) (price * discountRate);

        StudyCafeSeatPass studyCafeSeatPass = StudyCafeSeatPass.of(passType, duration, price, discountRate);

        // when
        int discountPrice = studyCafeSeatPass.getDiscountPrice();

        // then
        assertThat(discountPrice).isEqualTo(expectedDiscountPrice);
    }
}
class StudyCafeLockerPassTest {
    @DisplayName("인스턴스 생성 시 주입했던 passType, duration, price을 그대로 반환한다.")
    @Test
    void get() {
        // given
        StudyCafePassType passType1 = StudyCafePassType.HOURLY;
        int duration1 = 2;
        int price1 = 6500;

        StudyCafeLockerPass studyCafeLockerPass = StudyCafeLockerPass.of(passType1, duration1, price1);

        // when
        StudyCafePassType passType2 = studyCafeLockerPass.getPassType();
        int duration2 = studyCafeLockerPass.getDuration();
        int price2 = studyCafeLockerPass.getPrice();

        // then
        assertThat(passType1).isEqualTo(passType2);
        assertThat(duration1).isEqualTo(duration2);
        assertThat(price1).isEqualTo(price2);
    }
}

답변 0