2010-02-18 7 views
0

우리는 TSQL 저장 프로 시저에 상당히 많은 논리를 가지고 있습니다. 자동화 된 테스트의 열렬한 팬이기 때문에 필자는 저장 프로 시저에 대한 자동화 된 테스트를 작성하기 시작했습니다.저장 프로 시저의 논리 테스트

C# 프로젝트에서 저장 프로 시저를 호출하여 저장 프로 시저를 테스트합니다. 데이터베이스를 만지는 모든 테스트를 기본 클래스에서 상속하면 커밋되지 않은 TransactionScope에서 테스트가 실행됩니다. 이 문제와 관련된 몇 가지 문제가 있습니다 :
- 테스트는 데이터베이스에 손을 대지 않는 테스트에 비해 느리지 만 생각보다 많이 할 수는 없습니다.
- 때때로 테스트 로직을 실행하기 전에 데이터베이스를 필요한 상태로 만들려는 경우 FK 문제가 발생합니다. 예 : FK에서 참조하는 테이블을자를 필요가있을 때 그렇게 할 수 없습니다. 참조하는 테이블의 행을 제거해야합니다.
- 때로는 새로운 저장 프로 시저 또는 쿼리를 작성하여 필요한 상태로 데이터베이스를 가져와야합니다. 반면에 나는 어쨌든 새로운 기능을 위해 유사한 절차가 필요합니다.

이러한 단점에도 불구하고 스토어드 프로 시저 로직에 상당히 많은 로직이 있으므로 스토어드 프로 시저 로직 테스트를 작성하기로 선택합니다. TSqlUnit과 같은 완전히 다른 접근 방식을 사용하고 있습니까? 아니면 sprocs 테스트를 거치지 않아도됩니까?

+2

이 저장 프로 시저가 상대적으로 작은 값의 통증이 많이 있습니다 이유의 편리한 목록입니다. –

+1

나는 SP 캠프에서 확고하게 자리를 잡았지만 내 마음은 바뀌었다. CRUD에 저장된 procs는 단지 성가신 일입니다. OR 매퍼와 매개 변수화 된 인라인 쿼리 저장 프로 시저가 덜 중요해 보입니다. – vfilby

+0

불행히도 SPs는 내가 사용하도록 구속되어 있으며 변경되지 않을 것입니다. 나는 두려워합니다. – trendl

답변

0

개발자가 쉽게 또는 빌드 머신에서 실행할 수있는 모든 테스트를 한 곳에서 유지하므로 코드에서 저장된 procs를 테스트하는 것이 이점이 있다고 생각합니다.

단위 테스트 원칙에 위배됩니다 (각 테스트마다 설정 및 해제하지 않음). 테스트를 위해 데이터베이스 복사본을 사용하고 필요한 방식으로 데이터를 설정하는 스크립트를 사용합니다. 이 스크립트는 깨끗한 테스트 데이터베이스에 필요한 경우 다시 실행될 수 있습니다. 이 단점은 외래 키가 고통 스러울 때마다 스크립트를 계속 업데이트한다는 것입니다. 이 프로세스를 단순화하기 위해 SQL Server Management Studio 플러그인을 사용하여 데이터 삽입을 스크립팅합니다.

나는이 플러그인 믿고 내가 사용하는 것이 : http://sqlblogcasts.com/blogs/seanprice/archive/2007/08/28/data-scripter-add-in-for-management-studio.aspx