2010-07-23 5 views
3

좋아요, 저는 처음부터 끝까지 전체 TDD 프로세스를 파악하려고 노력했습니다.이 specflow 단계는 어떻게 구현해야합니까?

저는 ASP.NET MVC 2 응용 프로그램에 간단한 블로그를 작성하고 있습니다. 필자가 구현 한대로 테스트를 위해 수락 테스트를 시작했습니다. 내 BDD/ATDD 프레임 워크로 SpecFlow를 사용하고 있습니다.

저는 "Growing Object Orientated Systems Guided by Tests"을 읽었으므로 내가 가지고있는 것처럼 시작했습니다.

나는 모든 테스트 기능을 내 "얇은 조각으로 로그인 프로세스에 시작하기로 결정 본인은"걷기 해골을 "만드는거야 책에 제로 반복 설명 점에있을 것이다 체계의 분대 ". 이 경우 웹 사이트 자체와 데이터베이스.

로그인을 자세히 기록한 스토리를 작성 했으므로 내가 쓰고있는 첫 번째 시나리오는 성공적으로 로그인하고 있습니다. 상기 시나리오에서 기븐스의

하나는

"Given there is a registered user with the username 'TestUser' and password 'TestPassword'" 

그러나 나는이 단계를 구현 갈 것이라고 어떻게 확신 해요입니다.

분명히 이것은 주어진 자격 증명으로 데이터베이스에 사용자가 있어야한다는 것을 의미합니다. 그러나, 좋은 작은 프로그래머처럼 나는 암호가 어떤 식 으로든 해쉬되기를 원할 것이다.

나를 삽입 할 수있는 일종의 DatabaseHelper 클래스를 작성하려고 생각했습니다. 그러나 암호에는 해시 코드가 포함되어 있으므로 응용 프로그램 자체에서 DRY를 위반하는 것으로 보이는 동일한 해싱 코드가 필요합니다.

그래서 정말 여러 관련 질문은 여기에 있습니다 :

  • 내가이 단계 사투를 벌인거야 사실 나는 다른 곳에서 시작해야 의미합니까? 로그인 시스템이 사이트의 나머지 부분에 상당히 중요하더라도? 아마도 웹 사이트와 데이터베이스를 모두 테스트하는 기능 중에서 가장 얇은 기능일까요?
  • 내가 가지고있는 곳과 같은 곳에서 시작한다면 어떻게 할 것입니까? DRY에 대해 아직 걱정하지 않겠습니까? Acceptance Tests가 외부에서 브라우저를 통해 기능을 테스트하는 것처럼 내가 할 수있는 일이별로 없을 것입니까?

질문이 다소 모호하게 보인다면 사과해야합니다. 나는 이쪽에서 TDD를 배울 사람이 없으며, 그 "패하"순간을 보지 못한 패러다임 변화 중 하나입니다. 아직.

미리 감사드립니다.

답변

3

BDD를 수행하는 경우 모든 구성 요소를 테스트하는 가장 얇은 슬라이스로 시작하지 말고 가장 위험한 구성 요소를 테스트하는 가장 얇은 슬라이스로 시작 하시겠습니까?

시스템에 대한 액세스 권한이있는 사용자가 이미 로그인되어 있다고 가정합니다. 로그인하는 것이 위험한 것은 아닙니다. 전에 15,000 번 해본 적이 있습니다.

시작할 데이터를 하드 코드하십시오. 데이터베이스에서 데이터를 가져 오는 것은 그리 위험한 일은 아닙니다. 현실적인 데이터 예제를 얻을 수 있다면 나중에 시나리오에 영향을주지 않고 코드를 작성할 수 있습니다.

시스템에 대해 가장 잘 알고있는 부분을 찾아보십시오. 시나리오를 작성하고 시스템의 해당 비트 주변에서 대화 할 수 있습니다. 처음부터 시스템을 성장시킬 필요가 없습니다. 원하는 시점을 선택할 수 있습니다! 어떤 시스템을 사용하면 가장 불편한 점이 있습니까? 어떤 비트가 이해 관계자를 가장 불편하게합니까?

이것은 아마도 프로젝트가 성공하거나 실패하게 만드는 비트 일 것입니다. 로그인은 나중에 올 수 있으며 코드를 작성할 때 사용자가 로그인하려는 실제 가치가 일 때 일 것입니다.

+0

이 프로젝트는 나 자신을위한 운동입니다. 불행히도 저를 불편하게 만드는 시스템의 일부가 테스트입니다. 그러나, 당신의 옳은 일은 아마도 더 많은 가치가있는 무엇인가로 시작해야합니다. – Sekhat

+0

행운을 빈다! – Lunivore

2

등록 된 사용자가 없다는 시나리오로 시작하는 것이 더 쉬울까요? 시스템은이를 처리 할 필요가 있으며, 데이터베이스가 "그러한 사용자가 없다"는 스텁 이상으로 쓰여질 수 있습니다.