2008-09-14 2 views
9

데이터 액세스 계층 또는 대부분의 응용 프로그램 스택을 사용하여 통합 테스트를 수행하는 경우. 여러 테스트가 동일한 데이터베이스에서 실행되는 경우 서로 충돌하지 않도록하는 가장 좋은 방법은 무엇입니까?데이터베이스 통합 테스트

답변

9

트랜잭션.

무엇 레일 유닛 테스트 프레임 워크에 루비가하는 것은 이것이다는 :

Load all fixture data. 

For each test: 

    BEGIN TRANSACTION 

    # Yield control to user code 

    ROLLBACK TRANSACTION 

End for each 

이 없음 변경

  1. 테스트가 그것 인 -있는 동안 다른 스레드에 영향을주지 않습니다 데이터베이스로 만드는 것을 의미한다 진행
  2. 다음 테스트의 데이터는 이전 테스트에서 오염되지 않았습니다.
  3. 이것은 각 테스트의 데이터를 수동으로 다시로드하는 것보다 약 1 배 빠른 속도입니다. 하나

I이 내가 무료에서 Wildebeest의 오리온 에드워즈 '모두 답변을 받아 원

9

간단한 데이터베이스 애플리케이션의 경우, SQLite을 사용하는 것이 매우 중요합니다. 이를 통해 각 테스트마다 고유 한 독립형 데이터베이스를 가질 수 있습니다.

그러나 일반적인 SQL 기능을 사용하거나 SQLite와 프로덕션 데이터베이스 시스템 간의 약간의 차이점을 클래스 뒤에 숨길 수있는 경우에만 작동합니다.하지만 SQL에서 상당히 쉬워졌습니다. 응용 프로그램을 개발했습니다.

0

정말 멋진 생각하지만, 그것은 나를 보자하지 않을 것입니다. 내가 이것을하고 싶었던 이유는 이것이 이들을 수행하는 두 가지 주요 방법이라는 결론에 이르렀지만 선택해야하는 것은 개별적인 경우 (주로 데이터베이스의 크기)에 달려 있습니다.

+1

나는 항상 그 stackoverflow에 대한 문제를 찾습니다. 두 가지가 모두 좋다는 것을 정말로 말하고 싶을 때 선택의 문제입니다. 둘 다 똑같이 유용하다면 유사한 번호로 투표를 할 것이므로 맨 위에 머무르십시오. 사람들이 결정하자 :) –

0

서로 다른 성능이나 유효성에 영향을 미치지 않도록 다른 시간에 테스트를 실행하십시오.

1

Wildebeest의 답변에 덧붙여서 HSQLDB을 사용하여 각 테스트에서 DB의 깨끗한 인스턴스를 얻는 비슷한 유형의 테스트를 수행했습니다.

0

여기에있는 다른 답변 중 하나에서 레일 단위 테스트 프레임 워크만큼 영리하지는 않지만 테스트 또는 테스트 그룹마다 고유 한 데이터를 만드는 것이 다른 방법입니다. 이 솔루션의 지루함 수준은 보유하고있는 테스트 케이스의 수와 테스트 케이스가 서로 얼마나 의존적인지에 따라 다릅니다. 지루함은 테스트 당 하나의 데이터베이스 또는 종속 테스트 그룹이있는 경우에 유효합니다.

테스트 스위트를 실행하면 처음에 데이터를로드하고 테스트 스위트를 실행하고 결과를 언로드/비교하여 실제 결과가 예상 결과를 충족하는지 확인합니다. 그렇지 않은 경우주기를 다시 수행하십시오. 로드, 스위트 실행, 언로드/비교.