tSQLt ExpectException未检测到异常

时间:2019-02-20 17:39:45

标签: unit-testing tsqlt

我正在构建一个测试,以利用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;

我猜我做错了什么,但是我不确定是什么原因,因为这似乎是返回的非常简单的测试和错误消息。

任何帮助将不胜感激。

1 个答案:

答案 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;