우아한 테크캠프 Pro — 4주차

Byungkyu Ju
byungkyu-ju
Published in
5 min readFeb 1, 2021

4주차 — 인수 테스트 주도 개발

4주차 강의

4주차 강의 앞서 3주차에 진행했던 지하철노선 미션에 요구사항을 추가하면서 ATDD(인수테스트)를 경험하는 미션이었다.

먼저 ATDD란 A(Acceptance) + TDD로써, 단위테스트의 분야가 되는 TDD에 API를 호출하는 부분까지 함께 구현하는 방법이다.

https://mysoftwarequality.wordpress.com/2013/11/12/when-something-works-share-it/

TDD의 단위테스트는 개발팀 입장에서 정상적으로 개발이 되었는가를 판단할 수 있지만, ATDD는 프로덕트 오너의 입장에서 비즈니스의 목적에 맞게 정상적으로 동작하느냐를 측정할 수 있다는 조금 더 거시적인 관점으로 보는 것이 이해가 용이할 것 같다.

https://www.softwaretestingmaterial.com/tdd-vs-bdd-vs-atdd/

개발용어중 TDD, BDD, 그리고 ATDD를 비교해서 볼 수 있는데,
TDD는 기능구현에 중점인 개발방법이다.
그리고 BDD는 행위에 중점. 즉 given(주어진 상황), when(조건), then(결과)의 원칙으로써 기능을 나누어 행위 검증에 대해 포커스가 맞춰져있다.
ATDD는 요구사항이 올바르게 구현됐는지에 포커스가 맞춰져 있으므로, API호출의 인터페이스를 테스트하는 것으로 볼 수 있다.
최종 개발 순서는 인수테스트를 구현하는데 BDD 스타일로 TDD를 구현하는 순서로 개발을 진행하게 된다.

https://www.softwaretestingmaterial.com/tdd-vs-bdd-vs-atdd/

RestAssured

TDD는 Junit Test를 이용해서 테스트를 구현했었지만, ATDD의 ‘인수테스트'는 RestAssured를 활용해서 API 테스트를 구현했다.

RestAssured는 이번 강의를 통해 처음 알게된 라이브러리였는데, 객체만 TDD로 접근할 수 있었던 이전 지식에서, API 자체를 테스트 할 수 있는 라이브러리를 새롭게 알게 되었다. 혼자 프로젝트를 진행하면서 API 자체에 대한 테스트를 어떻게 구현해야하는지 몰랐었는데 이번 강의를 통해 알게됐다.

@Test 
public void lotto_resource_returns_200_with_expected_id_and_winners() {
when().
get("/lotto/{id}", 5).
then().
statusCode(200).
body("lotto.lottoId", equalTo(5),
"lotto.winners.winnerId", hasItems(23, 54)); }

미션은 ATDD에 대한 리뷰보다는 메서드의 목적과 기능에 대해 리뷰를 받은게 많았다.

List<Section> 에게 원시값을 포장한다는 의미를 주고 Sections라는 객체로 Wrap

code: https://github.com/byungkyu-ju/atdd-subway-admin
PR #1: https://github.com/next-step/atdd-subway-admin/pull/20
PR #2: https://github.com/next-step/atdd-subway-admin/pull/82
PR #3: https://github.com/next-step/atdd-subway-admin/pull/97
PR #4: https://github.com/next-step/atdd-subway-admin/pull/104

--

--