2012-06-13 2 views
1

간단한 CRUD 기반 응용 프로그램을 만들었습니다. 나는 이것을 TDD 방식으로 접근하려고 노력하고있다. 저는 TDD의 초보자이며 실제로 테스트를 진행하는 방법을 실제로 이해할 수 없습니다.TDD CRUD 기반 시나리오

시나리오는 다음과 같습니다

  • 내가 (한 번에 한) 직원/삭제/업데이트를 만들 수 있어야합니다.
  • 나는 표시 목적으로

당신이 단순위한 명령 줄 응용 프로그램으로 가정 할 수 있습니다에 대한 직원의 목록을 검색 할 수 있어야합니다. (실제로 WPF MVVM 응용 프로그램으로이 작업을 수행 할 것입니다.)

첫 번째 테스트가 무엇인지 잘 모르겠습니다. 내가 지금까지 시도 무엇

은 다음과 같습니다

내가 종업원의 집합을 반환하는 직원 저장소를했다고 가정합니다.

내 시도한 첫 번째 테스트했다 :이 시작하고 내 테스트 통과를 만들기 위해 GetEmployees에서() 메소드를 직원 개체를 반환

[Test] 
public void RepositoryShouldReturnTheListOfEmployees() 
{ 
    var repository = new EmployeeRepository(); 
    var employees = repository.GetEmployees(); 

    Assert.IsNotEmpty(employees); 
} 

. 그런 다음 테스트가 통과되면 인터페이스를 구현하기 위해 EmployeeRepository를 리팩토링하고 테스트 메소드에서이를 사용했습니다.

이것은 매우 사소한 작업이며이 접근법은 저에게는 과도한 공격으로 보입니다 (적어도 현재는). 그러나 응용 프로그램이 커지면서 테스트가 커지면 사소한 일만으로도 성과를 거둘 수 있다고 확신합니다.

하지만 내 접근 방식에서 뭔가 이상하지 않다는 느낌이 들었습니다. 숙련 된 TDDer가 동일한 접근 방식을 따르겠습니까? 또는 그것이 무엇이겠습니까. 또한 "직원 추가"기능에 사용할 수있는 테스트를 생각할 수 없습니다.

필자는 이러한 CRUD 시나리오를 건너 뛸 수 있으며 더 복잡한 기능을 테스트 해 볼 수 있습니다. 그러나 올바른 접근 방법입니까?

기본적으로 지금 내가하고있는 일은 내 저장소를 운전하면서 정보를 유지하고 검색하는 것 외에는 아무 것도하지 않는 테스트입니다. 지금까지이 TDDing은 나에게 상당히 평범한 작업으로 보였다.

귀하의 모든 의견에 감사드립니다.

답변

1

때로는 옳은 일을하는 것이 지루합니다. 나는이 보는 방법은 다음과

입니다 ..

귀하의 EmployeeRepository가 EmployeeObjects에 대한 CRUD를 지원하도록되어 역할이다. 이것은 응용 프로그램과 DB/데이터 저장소 사이의 포트입니다. 포트 및 어댑터 패턴 Cockburn et all을 참조하십시오.

  1. EmployeeRepository가 수행해야하는 스펙을 문서화하는 테스트를 작성하십시오.이 테스트는 역할/인터페이스에서 메소드를 호출합니다. 모든 구현을 대체 할 수 있어야하며 (설치시 인스턴스 생성) 테스트를 실행할 수 있어야합니다. 예 : SqlEmployeeRepository. 이는 통합 테스트의 자격을 얻습니다. SQL 하위 시스템이 EmployeeRepository 계약을 따르는 지 테스트하고 있습니다. 각 회원은 조언자로 활동합니다.
  2. 나머지 앱에 대한 단위 테스트에서는이 역할에 모의가 사용됩니다. 그들은 당신의 앱이 EmployeeRepository에서 적절한 호출을하는지 테스트 할 것입니다. Step1은 테스트에서 SQL 종속성을 제거 했으므로 테스트가 빠르게 실행되도록합니다.