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 для серьезности и состояния на основе примеров, которые были в документации для ExpectException, как показано ниже, но он все еще не проходит тест:
EXEC tSQLt.ExpectException @ExpectedMessagePattern = '%SomeError%',
@ExpectedSeverity = NULL,
@ExpectedState = NULL;
Я предполагаю, что я делаю что-то не так, но я не уверен, что, так как это похоже на очень упрощенный тест и сообщение об ошибке, которое возвращается.
Любая помощь будет оценена.
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;