ATDD
- 같이 읽을 만한 자료
ATDD를 간단하게 소개해보자면...
- 인수 테스트는 고객과 개발자, 그리고 테스터간의 커뮤니케이션을 기반으로 한 개발 방법론이다. 이러한 프로세스는 개발자와 테스터가 구현 전에 고객의 요구를 이해하는 데 도움이 되며 고객이 자신의 도메인 언어로 대화 할 수 있도록 한다.
Trade off of TDD
테스트 케이스가 없는 코드는 깨끗한 코드가 아니다. 아무리 코드가 우아해도, 아무리 가독성이 높아도, 테스트 케이스가 없으면 깨끗하지 않다.
- 테스트는 코드 품질을 일정 수준까지 보장할 수 있는 가장 확실한 수단
- TDD는 개발보다는 테스트를 우선으로 개발하는 방법론
- TDD를 마냥 진행하기에는 몇 가지 어려운 문제점이 있다.
- TDD는 실패한 테스트부터 작성해야 한다. 어떻게 시작하고 어디까지 구현해야 하는가?
- 막상 TDD로 구현을 하고 나니 쓰지 않는 코드가 완성되었다.
- 어렵사리 완성을 했지만 요구사항이 변경되며 테스트 코드까지 대거 변경해야 한다. 어디부터 다시 TDD를 시작해야 할까?
- TDD로 개발하니 어디부터 구현해야 하는지 감이 잘 오지 않아 생산성이 저하되었다.
ATDD
는 이 고민에 대한 해결책이 될 수 있다. 인수 테스트는 작업의 시작과 끝이 명확한 테스트이기 때문에 생산성에 큰 도움이 된다.
ATDD 개요
ATDD Cycle
- 사용자 시나리오 설계
- 작업 대상의
요청값
과응답값
설정 - 위의 절차를 토대로
ATDD
작성- 작성된 테스트는
Black box
방식이기 때문에 실제로 어떻게 구현하느냐는 고려 대상이 아니다. - 요청값과 응답값만을 확인하여 전 구간을 검증
- 작성된 테스트는
- 작성된
ATDD
를 망가뜨리지 않는 선에서 기능과 단위 테스트를 작성
인수 테스트의 조건
- 인수 조건이 명확해야 한다.
- 인수 조건은 개발자가 소프트웨어의 의도를 명확하게 이해했음을 드러내는 수단이다.
- 인수 조건의 예시
- 실제 요청/응답 환경과 유사한 테스트 환경이 구축되어 있어야 한다.
ATDD의 장점
- 테스트 의도를 더 명확하게 전달할 수 있어 구현 대상에 대한 이해가 빠름.
- 작업의 시작과 끝부터 정한 뒤 Top-down 방식으로 코드를 작성하는데 도움이 됨.
- 테스트를 최대한 수정하지 않으면서 리팩토링하기에 수월함.
ATDD 도구 소개
특징
이해하기 쉬운 구조로 단순화된 API
given(). param("key1", "value1"). param("key2", "value2"). when(). post("/somewhere"). then(). body(containsString("OK"));
검증을 위한 다양한 방식의 API 지원
// Example with JsonPath String json = get("/lotto").asString(); List<String> winnerIds = from(json).get("lotto.winners.winnerId"); // Example with XmlPath String xml = post("/shopping").andReturn().body().asString(); Node category = from(xml).get("shopping.category[0]");
프로젝트에 추가하기
gradle 기준으로 작성
rest-assured
dependencies { testImplementation 'io.rest-assured:rest-assured:3.3.0' }
spring-restdocs
dependencies { testImplementation 'org.springframework.restdocs:spring-restdocs-restassured' }
프로젝트에 더 맞는 의존성을 불러와서 사용하면 된다.
예제 코드
'Java' 카테고리의 다른 글
안전하게 코딩하는 좋은 습관, 일급 콜렉션 (1) | 2020.11.08 |
---|---|
멱등성과 테스트 (0) | 2020.11.08 |
Java Stream (6) 스트림 생성 (0) | 2020.07.22 |
Java Stream (5) 기본 자료형 스트림 (0) | 2020.07.22 |
Java Stream (4) 스트림 주요 메소드 (0) | 2020.07.17 |