문제

데이터 액세스 계층만 사용하거나 대부분의 애플리케이션 스택을 사용하여 통합 테스트를 수행하는 경우.여러 테스트가 동일한 데이터베이스에서 실행되는 경우 서로 충돌하는 것을 방지하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

업무.

Ruby on Rails 단위 테스트 프레임워크의 기능은 다음과 같습니다.

Load all fixture data.

For each test:

  BEGIN TRANSACTION

    # Yield control to user code

  ROLLBACK TRANSACTION

End for each

이는 다음을 의미합니다.

  1. 데이터베이스에 대한 테스트 변경 사항은 진행 중인 다른 스레드에 영향을 주지 않습니다.
  2. 다음 테스트의 데이터는 이전 테스트로 인해 오염되지 않습니다.
  3. 이는 각 테스트에 대해 데이터를 수동으로 다시 로드하는 것보다 약 1000배 더 빠릅니다.

나는 이것이 꽤 멋지다고 생각한다.

다른 팁

간단한 데이터베이스 응용 프로그램의 경우 다음을 사용하여 찾습니다. SQLite 매우 귀중한.이를 통해 각 테스트에 대해 고유한 독립형 데이터베이스를 가질 수 있습니다.

그러나 이는 간단한 일반 SQL 기능을 사용하거나 SQLite와 프로덕션 데이터베이스 시스템 간의 약간의 차이점을 클래스 뒤에 쉽게 숨길 수 있는 경우에만 작동하지만 저는 항상 제가 사용한 SQL 애플리케이션에서 이것이 매우 쉽다는 것을 알았습니다. 개발되었습니다.

Free Wildebeest의 답변에 추가하기 위해 나도 사용했습니다. HSQLDB 각 테스트가 DB의 깨끗한 인스턴스를 가져오는 유사한 유형 테스트를 수행합니다.

나는 Free Wildebeest와 Orion Edwards의 답변을 모두 받아들이고 싶었지만 허용되지 않았습니다.내가 이 작업을 하고 싶었던 이유는 이것이 두 가지 주요 방법이지만 선택할 방법은 개별 사례(주로 데이터베이스의 크기)에 따라 다르다는 결론에 도달했기 때문입니다.

또한 서로 다른 시간에 테스트를 실행하여 서로의 성능이나 유효성에 영향을 주지 않도록 하세요.

여기에 있는 다른 답변 중 하나에서 Rails 단위 테스트 프레임워크만큼 영리하지는 않지만 테스트 또는 테스트 그룹별로 고유한 데이터를 생성하는 것이 또 다른 방법입니다.이 솔루션의 지루함 정도는 보유한 테스트 사례의 수와 사례가 서로 얼마나 종속되어 있는지에 따라 달라집니다.테스트당 하나의 데이터베이스 또는 종속 테스트 그룹이 있는 경우 지루함은 사실입니다.

테스트 스위트를 실행할 때 시작 시 데이터를 로드하고, 테스트 스위트를 실행하고, 결과를 언로드/비교하여 실제 결과가 예상 결과와 일치하는지 확인합니다.그렇지 않은 경우 사이클을 다시 수행하십시오.로드, 제품군 실행, 언로드/비교.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top