2010-06-25 6 views
6

BDD로 구입하기 시작했습니다. 기본적으로, 내가 이해함에 따라, 특정 이야기에 대한 수용 기준을 잘 설명하는 시나리오를 작성합니다. 당신은 아직 구현하지 않은 클래스 대신에 mock을 사용하여 외부에서 간단한 테스트를 시작합니다. 당신이 진보 할 때, 당신은 실제 수업과 모의 대체해야합니다. Introduction to BDD에서 : 처음에는BDD 및 기능 테스트

, 조각은 가 신용 카드 또는 에 카드가 유효 할 수있을하는 계정을 설정하는 모의 객체를 사용하여 구현됩니다. 이는 행동을 구현하기위한 시작 지점을 으로 만듭니다. 응용 프로그램을 구현하는 것처럼 시나리오가 완료되는 시점에서, 그들이 가지고 적절한 엔드 - 투 - 엔드 기능 시험이 될 있도록 기븐스과 결과, 당신은 이 구현 실제 클래스를 사용하도록 변경된다.

내 질문은 : 시나리오 구현을 마쳤 으면 통합 테스트처럼 사용하는 모든 클래스를 실제 사용해야합니까? 예를 들어, DB를 사용한다면 코드가 실제 (가벼운 메모리 내) DB에 기록해야합니까? 결국, 엔드 투 엔드 테스트에 모의가 있어야합니까?

답변

3

글쎄, 그것은 달라집니다 :-) BDD에 의해 만들어진 테스트는 여전히 단위 테스트이므로, mocks를 사용하여 DB와 같은 외부 요인에 대한 의존성을 제거해야합니다.

그러나 본격적인 통합/기능 테스트에서는 모의 작업없이 전체 프로덕션 시스템에 대해 테스트해야합니다.

2

통합 테스트에는 통합중인 모듈 외부에서 코드/구성 요소를 위조하는 스텁/모의가 포함될 수 있습니다.

그러나 IMHO는 길을 따라 스텁/모의가없고 생산 코드 만 의미해야합니다. 또는 다른 말로하면, 모의이 존재한다면 그것은 실제로 종단 간 테스트는 아닙니다.

0

나는 Peter와 ratkok에 동의합니다. 나는 너를 항상 영원히 가두 었다고 생각한다. 그래서 너는 항상 단위 테스트를한다.

별도로 추가 테스트 (모의가 없거나 DB 등 사용)가 적절합니다.

시간에 따라 유용 할 수도 있습니다 (의존 코드 (DOC)는 모의하지만 다른 코드는 모의 해보십시오).

0

저는 최근에 BDD와 특히 jBehave를 조사했습니다. 나는 많은 폭포, 의식 지향적 인 사람들이있는 꽤 큰 기업에서 일합니다. 기업용 사례를 가져 와서 직접 테스트로 변환하여 개발자가 단위 테스트 또는 통합 테스트 중 하나로 전환 할 수있는 방법으로 BDD를 검토하고 있습니다.

BDD는 비즈니스가 원하는 것을 개발자가 이해할 수 있도록 도와주는 방법 일뿐만 아니라 요구 사항을 정확하게 표현할 수있는 가능성을 보장하는 방법이기도합니다.

당신이 mock을 다루는 경우, 당신은 단위 테스트를하고 있습니다. 클래스 조작의 세부 사항을 테스트하기위한 단위 테스트와 클래스가 다른 클래스와 잘 작동하는지 테스트하는 통합이 모두 필요합니다. 나는 개발자가 종종이 둘 사이에 주입되는 것을 발견하지만 가능한 한 명확하고 서로를 격리시키는 것이 가장 좋습니다.

2

예, 시나리오가 실행될 때까지는 모든 수업이 이상적입니다. 시나리오는 사용자의 관점에서 동작을 수행하므로 시스템은 사용자가 볼 수 있어야합니다.

BDD 초기에는 시나리오에서 모의 ​​작업을 시작했습니다. 더 이상 신경 쓰지 않아도됩니다. 레벨을 낮추면서 조롱을 계속하는 일이 많기 때문입니다. 대신 이해 관계자로부터보다 신속하게 피드백을받을 수 있도록 하드 코드 데이터 또는 동작과 같은 작업을 수행합니다.

우리는 여전히 단위 테스트에서 모의를 유지합니다.

데이터베이스와 같은 경우에는 메모리 내 DB를 사용하거나 피드백을 더 빨리 얻을 수있는 방법을 사용할 수 있습니다. 어떤 시점에서 가능한 한 생산에 가까운 시스템에서 시나리오를 실행해야합니다. 너무 느리면 정기적 인 빌드주기 대신에 하룻밤 동안 할 수 있습니다.

올바른 코드를 작성하는 것이 코드를 작성하는 것보다 훨씬 까다로운 작업입니다. 환경이 프로덕션 환경에 얼마나 가까이 있는지 걱정하기 전에 내 시나리오를 사용하여 이해 관계자와 사용자로부터 피드백을 얻는 것에 대해 걱정합니다. 변경 사항이 2 주에 한 번씩 배포되는 시점에 이르면 확실하게 버그를 도입하지 않는다는 확실성을 원할 수 있습니다.

행운을 빈다.