테스트 프로젝트를 만들고 일부 테스트 메소드를 작성하는 것은 일종의 TDD이지만 내 경험상 알려진 API가 있고 라이브러리가 사용자가 기대하는 것과 직접 일치하는 라이브러리에서 작업하지 않는 한 큰 도움이되지 않습니다. . 올바른 테스트 목록을 작성하고 사소한 응용 프로그램의 경우 실제로 수행하기가 어려울 수 있습니다.
SpecFlow를 사용하는 것이 좋습니다. 테스트 정의를 구현과 별도로 분리하고 기능 파일의 구조를 사용하면 실제로 테스트중인 대상에 대해 생각하게됩니다.
기능을 정의하면 다음과 같이 작성하면됩니다.
When a user is saved
Then the user should exist
지금은 코드 파일이 아니기 때문에 사용자를 생성하기 위해 어떤 메소드를 호출하는지 또는 어떤 클래스를 구현했는지와 같은 구현 세부 정보에 대해 생각하지 않아도됩니다. 태그를 사용하여 다른 구현을 선택할 수 있습니다. 따라서이 수준에서 "사용자 저장 여부"는 CreateUser에 대한 호출 또는 브라우저 열기 및 양식 제출을 의미하지 않습니다.
기능이 정의되면 모든 테스트가 생성되고 단계 정의 및 테스트중인 실제 애플리케이션 코드를 구현할 때 통과하기 시작합니다.
간단한 응용 프로그램의 경우 기능 파일 만 만들 수 있지만 더 복잡한 작업의 경우 더 완벽한 사양을 미리 정리하는 것이 좋습니다. 나는 이것을 위해 iPad 마인드 매핑 응용 프로그램을 사용하지만 가장 편한 도구를 사용할 수 있습니다.
"사용자 등록"과 같은 고급 기능 목록으로 시작하십시오. 이들은 직접 테스트하기에는 너무 광범위하므로 명확하게 정의 할 수있는 하위 기능으로 분류하고 일반적으로 "사용자 저장"또는 "기존 사용자보기"와 같은 특정 사용자 작업에 매핑합니다.
이러한 각 하위 기능에는 "유효한 사용자를 저장할 수 있습니다"및 "사용자 이름이 중복 된 사용자를 저장할 수 없습니다"와 같이 기능이 작동하는지 여부를 완전히 정의하는 시나리오 목록이 필요합니다.
이 목록을 작성할 때 일반적으로 구조를 조정해야하는 위치가 명확 해집니다. 기능에 대한 시나리오 테스트를 수행 할 수 없거나 하나의 기능에 너무 많은 결과가 발생하면 해당 기능은 잘못된 레벨이며 분할 또는 변경해야합니다.