tSQLt ExpectException не обнаруживает исключение - PullRequest
0 голосов
/ 20 февраля 2019

Я работал над созданием теста, чтобы использовать 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 для серьезности и состояния на основе примеров, которые были в документации для ExpectException, как показано ниже, но он все равно не прошел тест:

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

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

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

1 Ответ

0 голосов
/ 20 февраля 2019

После более обширного поиска в 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;
...