をテスト: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;
このテストは、[OK]を実行します - しかし、トリガは、私がやりたいことはありません:侵入からユーザーを防ぎます値> 10トリガこのバージョンの私が欲しいものを行います!
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;
しかし、今のテストが失敗し、Aを述べる)期待されたエラーが(あり)とB)と一致するBEGIN TRANSACTIONをには存在しないことロールバック取引。私はこの最後のエラーは、トランザクションを囲むtSQLtで、私のトリガーは何とかそれを妨害すると思いますが、それは私が期待するものではないと確信しています。
誰かが説明し、私がそれを正しくする手助けをすることができますか?
tSQLt.NewConnectionを使用することができますありがとう、セバスチャン!それをすべて非常に明確にしました! /アンダース –