tSQLt ExpectException Не обнаруживает исключение

Я работал над созданием теста, чтобы использовать 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}

Я также попытался передать NULL для Severity и State на основе примеров, которые были в документации для ExpectException, как показано ниже, но тест все равно не прошел:

    EXEC tSQLt.ExpectException @ExpectedMessagePattern = '%SomeError%',
                           @ExpectedSeverity = NULL,
                           @ExpectedState = NULL;

Я предполагаю, что делаю что-то не так, но я не уверен, что, так как это похоже на очень упрощенный тест и сообщение об ошибке, которое возвращается.

Любая помощь будет оценена.


person silverbullettruck2001    schedule 20.02.2019    source источник


Ответы (1)


После более тщательного поиска в Google я нашел несколько других примеров, а затем увидел, что написал свой тест неправильно. Я рассматривал ExpectException как утверждение, в котором вы выполняете хранимую процедуру, а затем утверждаете результаты, но с ExpectException вы должны сначала вызвать метод ExpectException, а затем выполнить хранимую процедуру, которая генерирует сообщение об ошибке. Чтобы еще больше объяснить это, вот как выглядит тест, когда он работает должным образом:

ALTER PROCEDURE uspTest.[test the test]
AS
BEGIN
    EXEC tSQLt.ExpectException @ExpectedMessagePattern = '%SomeError%',
                               @ExpectedSeverity = NULL,
                               @ExpectedState = NULL;
    EXEC dbo.testerror;
END;
person silverbullettruck2001    schedule 20.02.2019