2009-12-25 2 views
1

안녕하세요, 저는 현재 극단적 인 프로그래밍을 탐구하고 가능한 한 많은 것을 고수하려고합니다. 즉, 일단 반복을 시작하면 (예 : 릴리스 계획을 세운 후) 사용자 스토리를 수락 테스트로 전환해야합니다.웹 응용 프로그램 : 수락 테스트 : 테스트 및 격리 테스트의 초기 상태?

저는 구현 언어에 대해 잘 모르겠지만 웹 서버에서 제공하는 데이터베이스 백엔드를 사용하여 동적 웹 응용 프로그램이 될 것이라고 확신합니다. 현재는 로컬 테스트 환경을 갖춘 로컬 시스템에서 첫 번째 릴리스를 개발할 계획이므로 보안은 수용 테스트에 아무런 문제가 없다고 생각할 수 있습니다 (따라서 테스트 테스트 데이터베이스에 대한 승인 테스트에 루트 액세스 권한을 부여 할 수 있습니다 참여). 나는 아직 웹 어플리케이션이 될 것이기 때문에 받아 들일 테스트 프레임 워크에 대해서는 확신이 없다. 테스트를 작성하고 실행하기 위해 Selenium RC를 사용할 것이라고 생각한다. 나를 좀 더 잘 가리킬 수있다 :)).

그러나 아직 어두운 부분이 남아 있습니다. 새로운 애플리케이션을 구현하기 때문에 아직이 애플리케이션에 대한 데이터가 없습니다. 따라서 테스트 데이터베이스를 얻기 위해 현재 프로덕션 데이터베이스의 스냅 샷을 가져올 수 없으며 응용 프로그램은 상태 기반 (데이터베이스 백엔드가있는 웹 응용 프로그램처럼)이므로 모든 수용 테스트에 대해 단일 데이터베이스를 사용하고 있습니다 테스트 격리와 관련하여 추악한 문제를 일으킬 수 있습니다 (적어도 "이것은 재미 있고 많은 회색 머리카락을 초래할 수 있습니다"라고 읽는 단위 테스트의 경우).

그래서이 문제를 어떻게 해결할 수 있습니까? 인공 테스트 데이터베이스를 생성하고 (데이터베이스 스키마가 변경 될 때마다 유지 관리) 테스트를 실행하기 전에 각 수용 테스트가 적절한 데이터베이스 상태를 테스트 데이터베이스에로드하도록 허용 테스트를 작성합니까? (많은 악센트 테스트를 실행할 때 수십 개의 레코드를 수백 번로드하는 것이 얼마나 빠르거나 느릴까요?) 단일 예제 데이터베이스를 만들어야하며 모든 테스트에로드하고 최고를 기대하고 있습니까? 수락 테스트에서 항상 필요한 테스트 데이터를 다시 만들어야합니까? 아니면 사람들이 어떻게합니까?

답변

0

추가 조사에 따르면 올바른 설정 방법은 적절한 setUp-methods를 사용하여 데이터베이스를 정의 된 상태로 만드는 것입니다. 여기에는 테이블의 모든 기존 데이터를 삭제하고 테이블에 특정 테스트 세트를 추가 한 다음이 데이터를 테스트하여 실행합니다. 그 다음, teardown-method는 테이블에 수행 된 모든 작업을 지 웁니다. setUp이 모든 것을 삭제하거나 teardown이 모든 것을 다시 삭제합니다. 이 프로세스를 단순화하는 dbUnit과 같은 도구가 있습니다. 이것은 테스트 속도를 약간 줄이는 결과를 가져 오지만 테스트의 전체적인 격리를 설정합니다. 녹색은 단순히 녹색과 빨간색이 단순히 빨간색을 의미하므로 "현재 테스트 실행 순서를 감안할 때 작동합니다. ".

단일 사용자 스토리의 코드를 개발하는 동안 소량의 테스트에 집중할 수 있고 CI 서버가 모든 테스트를 실행하게하므로 속도 문제가 덜 중요 할 것입니다. 더 많은 시간) 배경에서 내가 끝났다고 생각하면.

관련 문제