UnitTest を実装して、例外も発生させるコード ブロックにデータを記録することをテストしようとしています。
したがって、コードは次のようになります。
--CREATE TABLE dbo.ErrorLog (ID int IDENTITY (1,1), ErrorDescription Varchar(100))
GO
ALTER PROCEDURE dbo.TestError
AS
DECLARE @Error varchar(100) = 'one is not equal to two'
--do some work
IF 1 <> 2
BEGIN
INSERT dbo.ErrorLog (ErrorDescription) VALUES (@error)
RAISERROR (@Error,16,1)
RETURN
END
GO
そして、エラーに取り組んでいるときに、ErrorLog へのエラーの挿入をテストしたいと思います。だから私はこのような私のテストを書いた:
EXEC tSQLt.NewTestClass 'Error'
GO
CREATE PROCEDURE error.test_GivenError_LogResult
AS
--Arrange
EXEC tSQLt.FakeTable 'dbo.ErrorLog'
DECLARE @Actual varchar(100)
DECLARE @Expected Varchar(100) = ('one is not equal to two')
--Act
--EXEC tSQLt.ExpectException @ExpectedMessage = 'one is not equal to two'
EXEC dbo.TestError
SELECT top 1 @Actual = ErrorDescription FROM dbo.ErrorLog
--ASSERT
EXEC tSQLt.AssertEquals @Expected, @Actual
GO
EXEC tsqlt.Run 'Error'
上記のようにこのテストを実行すると、proc でエラーが報告され、Assert は実行されません。tSQLt.ExpectException を含めると、例外は渡されますが、ErrorLog の結果に対して AssertEquals は実行されません。
これを回避する方法はありますか?