使用 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 进行重大重写,就无法解决这个问题 - 但我在这里询问以防万一其他人找到解决问题的方法。