测试存储过程而不影响数据库

时间:2012-03-19 02:21:37

标签: sql unit-testing sql-server-2005 testing stored-procedures

我需要对客户端数据库中的存储过程进行测试。无论如何都要测试存储过程而不影响数据库中的数据吗?

例如,SP中有一个插入查询,它将更改数据库的数据。

无论如何都有解决这个问题的方法吗?

2 个答案:

答案 0 :(得分:3)

您可以在事务中运行存储过程。通过在评论行之间放置语句来使用此脚本。运行整个脚本,您的事务将处于未提交状态。然后,突出显示ROLLBACK或COMMIT行,并相应地执行以完成。

始终有备份。

如果可能的话,可以在沙箱中远离您的客户数据。

请注意,在决定是提交还是回滚时,您可能会锁定客户端可能阻止其他sql语句的数据。

BEGIN TRANSACTION MyTransaction
GO

-- INSERT SQL BELOW


-- INSERT SQL ABOVE

GO
IF @@ERROR != 0
BEGIN
        PRINT '--------- ERROR - ROLLED BACK ---------'
        ROLLBACK TRANSACTION MyTransaction
END
ELSE
BEGIN
        PRINT '--------- SCRIPT EXECUTE VALID ---------'
        PRINT '--------- COMPLETE WITH ROLLBACK OR COMMIT NOW! ---------'
        --ROLLBACK TRANSACTION MyTransaction
        --COMMIT TRANSACTION MyTransaction
END

答案 1 :(得分:2)

如果SP意图更改数据,并且您不允许更改数据,那么您将如何“测试”SP?你会确定它不会死吗?如果它没有返回错误但是没有插入数据怎么办?

您可以按照Valamas建议的类似路径,但您还需要实际测试 SP。例如,如果要根据特定参数值插入特定数据,则必须:

  1. 开始交易
  2. 在数据库中创建任何测试数据
  3. 使用特定参数值
  4. 调用SP
  5. 仍然在事务中,检查数据库以查看是否插入了正确的行
  6. 回滚交易
  7. 我无法向您展示代码,但我已经成功地使用Visual Studio单元测试框架在.NET中的代码中执行上述操作。可以使用NUnit或任何其他单元测试框架执行相同的操作。我没有使用Visual Studio数据库项目的数据库单元测试功能。我只是在代码中执行上述步骤,使用ADO.NET和SqlTransaction类来控制事务。