我正在构建一个测试,以利用ExpectException来执行在存储过程执行过程中引发的错误,但是该测试从未像我期望的那样通过。因此,作为故障排除的一部分,我做了一个非常简单的存储过程:
ALTER PROC testerror AS RAISERROR ('SomeError',16,1);
然后我为此进行了测试:
ALTER PROCEDURE [uspTest].[test the test]
AS
BEGIN
EXEC testerror
--Assert
EXEC tSQLt.ExpectException @ExpectedMessagePattern = '%SomeError%',
@ExpectedSeverity = 16,
@ExpectedState = 1;
END;
在tSQLt中运行此命令时,测试失败,并显示以下输出:
Test Procedure: [SSISAdmin].[uspTest].[test the test] on SF5I-ETLTST01
[uspTest].[test the test] failed: (Error)
SomeError[16,1]{testerror,1}
我还根据以下ExpectException文档中的示例,尝试为严重性和状态传递NULL,但仍然无法通过测试:
EXEC tSQLt.ExpectException @ExpectedMessagePattern = '%SomeError%',
@ExpectedSeverity = NULL,
@ExpectedState = NULL;
我猜我做错了什么,但是我不确定是什么原因,因为这似乎是返回的非常简单的测试和错误消息。
任何帮助将不胜感激。
答案 0 :(得分:1)
在进行了更广泛的谷歌搜索之后,我发现了其他一些示例,然后发现我的测试写错了。我已将ExpectException视为断言,可以在其中执行存储的proc,然后断言结果,但是对于ExpectException,必须首先调用ExpectException方法,然后执行生成错误消息的存储过程。为了进一步说明这一点,这里是测试按预期工作时的外观:
ALTER PROCEDURE uspTest.[test the test]
AS
BEGIN
EXEC tSQLt.ExpectException @ExpectedMessagePattern = '%SomeError%',
@ExpectedSeverity = NULL,
@ExpectedState = NULL;
EXEC dbo.testerror;
END;