문제

프로젝트를위한 테스트 환경에서 작업 중이며 DBUNIT.NET을 사용하여 많은 데이터베이스 상호 작용 테스트를 수행하고 있습니다. 그래도 매우 큰 질문이 있습니다.

우리는 Oracle에 대항하여 실행 중이며 모든 개발자에 대한 별도의 테스트 DB 인스턴스를 설정하는 것은 실제로 실현 가능하지 않습니다 (특히 시간 동안 묶인 DBA가 1 개만 있기 때문에). 이는 모든 개발자 및 Out Continuous Integration Server가 동일한 DB 스키마를 사용해야 함을 의미합니다.

따라서 질문에 대해 : 한 사람 이상이 동시에 테스트하는 것을 방지 할 수있는 좋은 방법이 있습니까? 테스트가 실행 중임을 나타내는 DB 테이블에 레코드를 넣는 것은 쉽습니다. 그런 다음 테스트가 완료된 후 제거하지만 Nunit은 테스트 세션 시작 및 종료시 무언가를 실행할 수있는 방법이 없습니다.

다른 생각이 있습니까? 그것은 매우 일반적인 문제인 것 같습니다 ... 아니면 모든 사람이 실제로 테스트를 실행할 수있는 모든 개발자/테스터에 대해 별도의 DB 인스턴스를 실행합니까?

도움이 되었습니까?

해결책

공유 데이터베이스에서 많은 개발자에 대한 데이터베이스 테스트를 실행할 때 잠금 토큰으로 단일 레코드가있는 더미 테이블을 사용했습니다. 우리는 실제로 각 테스트 케이스에 대한 잠금 장치를 개별적으로 인수하여 하나의 테스트 케이스를 실행하려는 개발자가 전체 스위트를 실행하는 다른 개발자를 기다릴 필요가 없습니다. 각 테스트가 자체 데이터를 설정했습니다. 테스트 방법간에 휴대하지 마십시오.

우리는 데이터베이스 잠금 메커니즘을 사용하여 다른 사람이 이미 테스트를 실행할 때 실패하지 않고 실제로 테스트를 대기했습니다. Oracle의 잠금 알고리즘은 약간 다르다고 생각합니다. 그래서 그것이 어떻게 작동하는지 모르겠습니다.

우리가 곤경에 처한 유일한 곳은 개발자가 디버그 모드에서 테스트를 시작하기를 원했을 때였습니다. 그것은 디버거를 출시 할 때까지 테스트를 실행하고자하는 다른 개발자들을 차단할 것입니다. 우리는 현재 사용자의 이름을 더미 테이블에 썼고 잠금 장치가 30 초 이상 차단되면 메시지를 인쇄했습니다. "Bob은 현재 테스트를 진행하고 있으며 지난 5 분 동안있었습니다."

이것은 괜찮 았지만 유지해야 할 일이 많았습니다. 우리는 데이터베이스 테스트 수를 작게 유지하려고 노력했으며 대부분의 테스트를 메모리에서 순수한 단위 테스트로 수행했습니다.

다른 팁

testfixturesetup] 속성을 사용하여 "True"세마포어를 시뮬레이션하는 방법으로 테스트가 실행되고 있음을 나타내는 플래그를 주입 할 수 있습니다.

내가 이것과 유사하게 문제가있는 일 :

이 프로그램에는 모든 관련 항목의 전면에 추가 된 구성 변수가있었습니다. 각 스테이션에는 자체 설정이 있었으며 충돌이 없을 것입니다.

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