BDD와 TDD는 둘 다 테스트 첫 개발에 사용되지만 서로 비교할 수 없습니다.
BDD는 영어와 같은 구문으로 테스트를 작성하는 것 이상의 기능을합니다. 키위. BDD (ATDD-Acceptance Test Driven Development라고도 함)는 개발자, 품질 보증 및 디자이너 (예 : 비즈니스 및 상호 작용 설계자)와 함께 시작하여 제안 된 솔루션에 대한 공유 된 이해를 개발합니다. 예제를 사용하여 동작을 설명하는 것이 일반적이며, 예를 들어 사양 별이라고도합니다.
추상화에 대해 생각하는 유용한 방법은 자신이하는 일 (추상적, 고급 정책)과 어떻게하는지 (구체적이고 세부적인 세부 사항)를 구별하는 것입니다. 더 높은 수준의 정책을 수행하기위한 모든 구체적인 세부 사항이 있습니다. 구체적인 것을 볼 때, 그것이 제공하는 정책을 식별하는 것이 유익합니다.
예제를 통해 응용 프로그램이 수행하는 동작, 즉 동작을 테스트하는 상위 수준의 수락 테스트를 만들 수 있습니다.
단위 테스트는 앱이 솔루션을 구현하는 방법을 테스트하는 데 사용됩니다. 즉, 해당 메시지가 적절한 시간에 공동 작업자/종속성에 전송되는지 테스트합니다.
표준 TDD주기의 단계는 Red, Green, Refactor입니다. 초록색 단계에서 목표는 가능한 한 빨리 테스트를 통과 시키거나, 훅 또는 사기꾼에 의해 이루어 지므로 추악하고 조직화되지 않은 코드를 작성하는 것이 좋습니다. 테스트가 통과되면 코드를 리팩토링하여 읽기/변경이 가능하도록합니다.
마찬가지로 BDD/ATDD 사이클을 사용하면 Red, Green, Refactor가됩니다. BDD의 초록색 단계에서 합격 판정 테스트를 통과하십시오. 작성한 모든 코드는 테스트 자체 내에 존재할 수 있습니다. BDD의 리팩터 단계에서 테스트 코드를 프로덕션 코드로 추출합니다. TDD를 사용하여 추출을 안내 할 수 있습니다.
따라서 주어진 BDD 수락 테스트의 경우 여러 개의 TDD 테스트가있을 수 있습니다.
REST 호출을 테스트하는 방법에 대해서는 추상화의 전제로 돌아가 봅시다. 우리가하는 일과 구별하는 것입니다.
REST 서비스를 호출하는 것은 구체적인 동작입니다. 그것이 만족하는 정책은 모델 객체들의리스트를 제공하는 것일 수있다.
구현하려는 유스 케이스가 친구를 점심 식사에 초대하는 것이라고 가정 해 보겠습니다. 유스 케이스 책임의 일부는 서버에서 친구 목록을 얻는 것입니다. 서버가 어떻게 친구를 찾는지 상관하지 않습니다.
BDD 테스트는 친구 목록 가져 오기, 친구 선택 및 초대 완료를 처리합니다. BDD 테스트는 REST 호출을 실제로 작성하는 것에 대해 걱정하지 않습니다.
TDD를 사용하여 서버와의 통신을 처리하는 클래스를 구현할 때 원격 데이터 소스 (예 : 서버)에서 JSON을 검색하고 JSON이 User
모델 객체로 올바르게 구문 분석되는지 테스트 할 수 있습니다. 오류 등으로 응답하는 데이터 소스를 포괄하는 테스트를 수행 할 수도 있습니다.
REST를 실제로 호출하는 시점에서 REST를 사용하여 원격 서버의 백엔드 서버와 통신하는 원격 데이터 소스 구현시 당신이 제어하지 않는 구성 요소 (즉, 실제 백엔드 서버)와의 통합을 테스트 할 때 이것을 통합 테스트로 분류 할 것입니다. 통합 테스트에서는 서버가 JSON 데이터를 앱이 기대하는 형식으로 반환하는지 확인하거나 필요한 경우 오류가 반환되는지 확인하면됩니다.
BDD와 TDD는 완전히 비교할 수 있습니다. BDD는 TDD에서 직접 파생되어 "test"라는 단어를 제거합니다 (내 대답의 맨 위 링크 참조). "Acceptance Test"에 관해 이야기 할 때, 당신은 그 단어를 "test"로 되돌려 놓습니다. 이것은 처음부터 BDD의 요점을 완전히 무효로합니다! "BDD 테스트"와 같은 것은 없습니다. 예와 시나리오 만 가능하며 자동화 될 수 있습니다. BDD는 클래스에도 사용할 수 있습니다 (첫 번째 BDD 도구 인 JBehave는 원래 JUnit을 대체하기 위해 사용되었습니다). 그것은 BDD = 전체 시스템 이상이고 TDD = 클래스/모듈이지만 일반적인 오해입니다. – Lunivore