ATDD 강의 실습을 위한 지하철 노선도 애플리케이션
- 구간 단위 테스트 (LineTest) 작성
- 구간 서비스 단위 테스트 without Mock (LineServiceTest) 작성
- 구간 서비스 단위 테스트 with Mock (LineServiceMockTest) 작성
- 단위 테스트를 기반으로 비즈니스 로직을 리팩터링 하세요.
- 기존 기능에 대한 테스트 작성이기 때문에 테스트 작성 시 바로 테스트가 성공해야 함
- 비즈니스 로직을 도메인 클래스(Line)으로 옮기기
- 구간 추가/삭제 기능에 대한 비즈니스 로직은 현재 LineService에 대부분 위치하고 있음
- 리팩터링 시 LineTest의 테스트 메서드를 활용하여 TDD 사이클로 리팩터링을 진행
- 리팩터링 과정에서 Line 이외 추가적인 클래스가 생겨도 좋음
- 구간 관리에 대한 책임을 Line 외 별도의 도메인 객체가 가지게 할 수 있음
- 기존 구간에 새로운 구간 추가
- 상행역과 하행역 둘 중 하나도 포함되어있지 않으면 추가할 수 없음
- 사이에 추가되는 경우 : A-C > A-B B-C -> 새롭게 추가된 구간의 길이를 뺀 나머지를 새로운 역과 기존 역의 거리로 함.
- 상행 종점을 추가하는 경우 : 새로운 구간의 하행역이 기존 노선의 상행 종점이어야 함.
- 하행 종점을 추가하는 경우 : 새로운 구간의 상행역이 기존 노선의 하행 종점이어야 함.
- 역 사이에 새로운 역을 등록할 경우 기존 역 사이 길이보다 크거나 같으면 등록을 할 수 없음
- 상행역과 하행역이 이미 노선에 모두 등록되어 있다면 추가할 수 없음
- 역 목록 조회
- 구간이 추가된 순서가 아닌, 상행 종점에서 하행 종점 순서로 역 목록이 조회되어야 함.
- 요구사항 설명을 참고하여 인수 조건을 정의
- 인수 조건을 검증하는 인수 테스트 작성
- 인수 테스트를 충족하는 기능 구현
- 인수 조건은 인수 테스트 메서드 상단에 주석으로 작성.
- 인수 테스트 이후 기능 구현은 TDD로
- 도메인 레이어 테스트는 필수
- 서비스 레이어 테스트는 선택
- 예외 케이스 검증 테스트 필수
- 위치에 상관없이 역 삭제 기능 추가
- 중간역이 삭제되면, 구간이 합쳐진다. 거리는 두 구간의 합이 된다.
- 상행 종점이 삭제되면, 구간도 함께 삭제된다.
- 하행 종점이 삭제되면, 구간도 함께 삭제된다.
- 구간에 하나인 노선에서는 역을 삭제할 수 없다.
- 노선에 등록되어 있지 않은 역은 삭제할 수 없다.
- 요구사항 설명을 참고하여 인수 조건을 정의
- 인수 조건을 검증하는 인수 테스트 작성
- 인수 테스트를 충족하는 기능 구현
- 인수 조건은 인수 테스트 메서드 상단에 주석으로 작성.
- 인수 테스트 이후 기능 구현은 TDD로
- 도메인 레이어 테스트는 필수
- 서비스 레이어 테스트는 선택
- 예외 케이스 검증 테스트 필수
- 경로 조회 기능 구현
- 요청 포맷
- Get 방식 : http://localhost:55494/subwayPath?source=1&target=3
- source:출발역Id, target:도착역Id
- 응답 포맷
- stations: 출발역으로부터 도착역까지의 경로에 있는 역 목록
- distance: 조회한 경로 구간의 거리
- 예외 상황 테스트
- 출발역과 도착역이 같은 경우
- 출발역과 도착역이 연결이 되어 있지 않은 경우
- 존재하지 않은 출발역이나 도착역을 조회 할 경우
- jgrapht 사용하기 (다익스트라 알고리즘)
- 가중치는 거리로 해서 최단 거리를 구하기.
- 정점: 지하철역(Station)
- 간선: 지하철역 연결정보(Section)
- 가중치: 거리
- 테스트
- 단위 테스트는 하지 않는다.
- 기능을 직접 사용하는 부분은 테스트를 작성한다.이때 Jgrapht 실제 객체를 사용한다.
- 가중치는 거리로 해서 최단 거리를 구하기.
- 요청 포맷
- 요구사항 설명을 참고하여 인수 조건을 정의
- 인수 조건을 검증하는 인수 테스트 작성
- 인수 테스트를 충족하는 기능 구현
- 인수 조건은 인수 테스트 메서드 상단에 주석으로 작성.
- 인수 테스트 이후 기능 구현은 TDD로
- 도메인 레이어 테스트는 필수
- 서비스 레이어 테스트는 선택
- 예외 케이스 검증 테스트 필수