Используя tSQLt 1.0.5873.27393, я пытаюсь написать тест tSQLt для хранимой процедуры, которая записывает ошибки, попавшие в блок CATCH
, в таблицу журнала, прежде чем повторно выдать ошибку в вызывающий сеанс.
Я могу успешно проверить, что сообщение об ошибке выдается повторно, используя tSQLt.ExpectException
, но побочный эффект, по-видимому, заключается в том, что невозможно проверить какие-либо другие утверждения после вызова tSQLt.ExpectException
, поэтому я не могу проверить, была ли ошибка записана в журнал стол.
Самый простой тест, который я могу придумать, который демонстрирует проблему:
CREATE PROC MyTests.[test ExpectException]
AS
BEGIN
EXEC tSQLt.ExpectException;
THROW 50001, 'Error message',1
EXEC tSQLt.AssertEquals 0,1, '0=1'
END
GO
который производит следующий (неожиданный) вывод при выполнении:
|No|Test Case Name |Dur(ms)|Result |
+--+--------------------------------+-------+-------+
|1 |[MyTests].[test ExpectException]| 3|Success|
Используя трассировку профилировщика, я вижу, что утверждение AssertEquals
никогда не выполняется, потому что ошибка перехватывается блоком CATCH
внутри tSQLt.Private_RunTest
.
Поскольку tSQLt использует CATCH
для перехвата ошибок, я подозреваю, что нет решения этой проблемы без серьезной перезаписи tSQLt, но я спрашиваю здесь на случай, если другие нашли способ обойти проблему.