我的SQL Server 2005数据库中的表上有一个INSTEAD OF触发器,用于检查多个传入值。如果传入值无效,则会引发错误并回滚事务。否则,将插入记录。
我想包含对此触发器的TSQLUnit测试,其中,如果插入了无效值,则回滚事务是测试的成功结果。我已经创建了一个测试程序来执行此操作,但回滚事务会中止执行整套测试。
有人有过这方面的成功吗?如果是这样,你是如何完成的?
如果使用TSQLUnit无法做到这一点,那么如何测试触发器?或者你根本测试它们?
答案 0 :(得分:0)
我不知道它是TSQLUnit还是您看到的SQL的标准行为。
SQL Server 2000及更早版本中的触发器异常在ROLLBACK上为batch aborting,因为@@TRANCOUNT = 0
使用SQL Server 2005中的TRY / CATCH,行为会发生变化,客户端应该正确处理它。这样说,无论如何我都会在TRY / CATCH中包裹外部呼叫。
建议:
答案 1 :(得分:0)
还有另一个名为TST http://tst.codeplex.com/的TSQL单元测试框架,它可以允许测试具有自己事务的代码。来自TST文档:
“当测试代码有自己的事务时,TST使用一种可靠的方法来检测其自身的回滚机制无效的情况。可以在测试,套件或全局级别禁用TST回滚。”
我没有使用过这个框架,但在研究这个主题时我遇到了它(以及你的问题)。