2014-03-12 2 views
1

tSQLt를 사용하여 SQL Server 단원 테스트를 만들고 있습니다.tSQLt - 여러 SQL Server 결과 집합 처리

내가 테스트중인 proc은 3 개의 결과 집합을 반환합니다. 내 webAPI 여러 개의 결과 집합을 처리하고 잘 UI에 보냅니다.

질문 : SQL Server 단원 테스트에서 어떻게 3 개의 결과 집합을 처리합니까? proc이 하나의 결과 집합을 반환하면 처리하기 쉽습니다. 다음을 사용합니다.

Insert Into @ReturnData 
(
ID, 
Data1, 
Data2 
) 
Exec @Ret = StoreProcName 

그런 다음 @ReturnData 임시 테이블에 대해 여러 검사를 실행할 수 있습니다. 하지만 여러 결과 집합을 반환하는 경우 proc 처리/테스트하는 방법을 이해하지 않습니다. 이것은 가능한가?

감사합니다.

답변

4

사용하는 것이 좋습니다 방법은 tSQLt.ResultSetFilter()입니다. 이 함수는 반환 할 결과 집합의 번호에 대한 매개 변수를 취하여 테스트중인 코드 (예제에서는 StoreProcName)를 호출하고 그 결과 집합을 반환합니다. 그런 다음이 결과 집합을 사용하여 Insert..Exec을 사용하여 캡처 할 수 있습니다.

이 절차의 단점은 실행 당 하나의 결과 집합 만 캡처하므로 모든 결과 집합을 반환하기 위해 여러 번 호출해야한다는 것입니다. 저는 대개 테스트 당 하나의 결과 세트 만 보며 테스트에서 하나의 질문에 집중할 수있게 해줍니다. 그러나 결과가 상호 관련되어 있고 테스트가 평가되기 위해 돌아올 필요가 있다면 tSQLt.ResultSetFilter으로 전화해야합니다. 따라서 테스트에서 코드가 두 번 이상 테스트되었습니다 (manual에는이 상황에 대한 자세한 정보가 있습니다)

제쳐두고, 제가 관심을 가질만한 using insert..exec with SPs that return multiple identical result sets 일 때 예기치 않은 동작에 대해 블로그에 글을 올렸습니다.

3

DaveGreen의 답변이 있습니다. 그러나 완성도, 나는 기초에 확장하는이 공유하고 싶었 : http://tsqlt.org/201/using-tsqlt-resultsetfilter/

당신이 저장 프로 시저를 호출하고 매개 변수를 전달해야하는 경우를, 다음을 수행하십시오

은 '간부을 보유하고 @Variable 만들기 ... '매개 변수 값이 포함 된 문자열. 그러면 다음과 같이 할 수 있습니다.

Declare @Variable Varchar(max) 
Set @Variable = ‘exec STOREDPROCNAME ‘’param1’’, ‘’param2’’’; 
EXEC tSQLt.ResultSetFilter 2, @Variable 

숫자 2는 반환되는 두 번째 결과 집합을 지정합니다.

니스 및 딱딱한 ... ;-)