我有一个调用存储过程的测试。我希望存储过程拒绝提供的输入,并使用raiserror。 我的tSQLt测试的相关部分是:
EXEC tSQLt.ExpectException @ExpectedMessagePattern ='%多个 子类别%';
EXEC usp_add_rfx_rfx lot,of,parameters,here
来自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等但没有快乐。有什么想法吗?
答案 0 :(得分:1)
该错误看起来像测试中的sproc(ups_add_rfx_rfx)内置了自己的事务处理。堆栈溢出How to ROLLBACK a transaction when testing using tSQLt上有类似的问题,在那个问题Sebastien上,tSQLt的一个作者链接到他自己的一个关于解决该问题的一种方法的博客文章how to rollback in procedures。