skarltjr / TDD_with_spring

TDD_with_spring

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

TDD_with_spring

  • application TDD / ATDD

목표

사용자를 위해 올바른 요구사항 구현
나와 남의 이해를 위해 적절한 책임 분리
나와 남의 수정을 위해 올바른 테스트 구현

왜 테스트코드부터 시작해야할까?

  • 나와 남이 수정하기 좋은 코드를 지향한다.
  • 코드 수정에 있어서 안정성 확보

프로그래밍 방법 및 순서

  • Repository -> Service -> Controller 순서로 개발을 진행한다.
  • Repository 계층의 테스트는 H2와 같은 인메모리 데이터베이스 기반의 통합 테스트로 진행한다.
  • Service 계층의 테스트는 Mockito를 사용해 Repository 계층을 Mock하여 진행한다.
  • Controller 계층의 테스트는 SpringTest의 MockMvc를 사용해 진행한다.
의존성이 적은 순서대로 테스트를 진행한다
가령 service는 repo를 의존성으로 갖는다
controller는 service를 의존성으로 갖는다.
따라서 repository부터 진행한다.

[ 문제 설명 ]

  • 이번 연습 문제의 주제는 멤버십 적립 서비스입니다.
  • 현재 지원중인 멤버십에는 네이버, 카카오, 라인 3가지 멤버십이 있으며, 사용자는 원하는 멤버십을 등록할 수 있습니다.
  • 포인트 적립비율은 결제금액의 1%로 고정되며, 추후에 고정 금액(1000원)으로 확장하여 적립될 수 있어야 합니다.
  • 이번 연습문제에서는 위의 문제 설명과 아래의 요구사항을 만족하는 REST API를 자유롭게 정의하고, TDD 방식으로 구현하는 것입니다.

[ 기능 요구 사항 ]

  • 멤버십 연결하기, 나의 멤버십 조회, 멤버십 연결끊기, 포인트 적립 API 를 구현합니다.
  • 사용자 식별값은 문자열 형태이며 "X-USER-ID" 라는 HTTP Header 로 전달되며, 이 값은 포인트 적립할 때 바코드 대신 사용됩니다.
  • Content-type 응답 형태는 application/json(JSON) 형식을 사용합니다.
  • 각 기능 및 제약사항에 대한 개발을 TDD, 단위테스트를 기반으로 진행해야 합니다.

[ 상세 기술 구현 사항 ]

  • 나의 멤버십 등록 API

    • 기능: 나의 멤버십을 등록합니다.
    • 요청: 사용자 식별값, 멤버십 이름, 포인트
    • 응답: 멤버십 ID, 멤버십 이름
  • 나의 멤버십 전체 조회 API

    • 기능: 내가 가진 모든 멤버십을 조회합니다.
    • 요청: 사용자 식별값
    • 응답: {멤버십 ID, 멤버십 이름, 포인트, 가입 일시}의 멤버십 리스트
  • 나의 멤버십 상세 조회 API

    • 기능: 나의 1개 멤버십을 상세 조회합니다.
    • 요청: 사용자 식별값, 멤버십 ID
    • 응답: 멤버십 ID, 멤버십 이름, 포인트, 가입일시
  • 나의 멤버십 삭제 API

    • 기능: 나의 멤버십을 삭제합니다.
    • 요청: 사용자 식별값, 멤버십 번호
    • 응답: X
  • 멤버십 포인트 적립 API

    • 기능: 나의 멤버십 포인트를 결제 금액의 1%만큼 적립합니다.
    • 요청: 사용자 식별값, 멤버십 ID, 사용 금액을 입력값으로 받습니다.
    • 응답: X
  • 참고 : https://mangkyu.tistory.com/183

About

TDD_with_spring


Languages

Language:Java 100.0%