0

我有一个调用存储过程的测试。我希望存储过程拒绝提供的输入,并带有 raiserror。我的 tSQLt 测试的相关部分是:

EXEC tSQLt.ExpectException @ExpectedMessagePattern = '%more than one subcategory%';
EXEC usp_add_rfx_rfx 很多,的,参数,在这里

tSQLt 的测试结果取决于 usp_add_rfx_rfx sp 中 raiserror 的严重性。

如果严重性为 12 或更高,则测试失败并显示以下消息:

[test_RFX_configuration].[test_multiple_categories_and_lots] 失败:(错误)EXECUTE 后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配。先前计数 = 1,当前计数 = 0.[16,2]{test_multiple_categories_and_lots,0}(还有一个 ROLLBACK ERROR --> ROLLBACK TRANSACTION 请求没有对应的 BEGIN TRANSACTION.{Private_RunTest,149})

如果严重性较小,则测试失败,如下所示:

[test_RFX_configuration].[test_multiple_categories_and_lots] 失败:(失败)预期会引发错误。

我已经用谷歌搜索了这个问题并尝试了一些我发现的东西 - 使用 TRY-CATCH 等,但没有任何乐趣。有任何想法吗?

4

1 回答 1

1

该错误看起来像被测试的存储过程(ups_add_rfx_rfx)有它自己的内置事务处理。关于堆栈溢出How to ROLLBACK a transaction when testing using tSQLt和关于该问题的类似问题 Sebastien,tSQLt 的作者之一链接到他的一个自己的博客文章介绍了一种解决该问题的方法,即如何在程序中回滚

于 2016-06-09T13:16:37.703 回答