테스트,하지만 작동 할 수 없습니다, 그래서 여기에 약간의 테스트 케이스를 제시하고, 희망 누군가가 나에게 설명 할 수tSQLt, 트리거와 나는이 주위에 내 머리를 래핑하는 시도
을 먼저 조금 테스트 데이터베이스 : 여기
CREATE DATABASE test;
USE test;
CREATE TABLE testA (nr INT)
GO
CREATE TRIGGER triggerTestA
ON testA
FOR INSERT AS BEGIN
SET NOCOUNT ON;
IF EXISTS (SELECT nr FROM Inserted WHERE nr > 10)
RAISERROR('Too high number!', 16, 1);
END;
그리고는 동작을 테스트하려면 TSQL 테스트입니다 :
ALTER PROCEDURE [mytests].[test1] AS
BEGIN
EXEC tSQLt.FakeTable @TableName = N'testA'
EXEC tSQLt.ApplyTrigger
@TableName = N'testA',
@TriggerName ='triggerTestA'
EXEC tSQLt.ExpectException
INSERT INTO dbo.testA VALUES (12)
END;
이 시험은 확인 실행 -하지만 트리거가 내가 원하는 것을하지 않습니다 진입하는 사용자를 방지 값>
CREATE TRIGGER triggerTestA
ON testA FOR INSERT AS BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION;
BEGIN TRY
IF EXISTS (SELECT nr FROM Inserted WHERE nr > 10)
RAISERROR('Too high number!', 16, 1);
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
THROW;
END CATCH;
END;
을하지만 지금은 테스트가 아니요 일치하도록 TRANSACTION이 BEGIN 것을 A) 오류가 예상 된 (가)와 B)를 알리는 실패! (10) 트리거의이 버전은 내가 원하는 것을 롤백 거래. 이 마지막 오류가 트랜잭션을 둘러싼 tSQLt와 같아서 내 방아쇠가 어떻게 든 방해한다고 생각하지만 기대했던 것이 아닙니다.
누군가 설명하고 어쩌면 내가 올바르게 할 수 있도록 도와 줄 수 있습니까?
tSQLt.NewConnection를 사용할 수 있습니다 고마워, 세바스찬! 모든 것을 아주 분명하게 만들었습니다!/Anders –