SQL单元测试存储过程

时间:2013-04-20 23:26:33

标签: sql sql-server sql-server-2008

我是使用SQL数据库的新手,但我遇到了测试我的数据库的问题。出于安全原因,任何查询或更新都是通过存储过程完成的。

对等方建议我使用存储过程来测试其他存储过程。这是对我的存储过程进行单元测试的好或坏解决方案,以确保它们正在做他们想要做的事情吗?

6 个答案:

答案 0 :(得分:9)

我使用Visual Studio找到了一个很好的解决方案: Visual Studio Unit Testing

它允许您为SQL存储过程创建单元测试,您也可以使用正则表达式填充数据库 - 非常酷的东西。

答案 1 :(得分:5)

除了DbUnitNUnit之外,如果您喜欢编写SQL,可以使用tSQLttSQLt是一个用t sql编写的开源框架,用于编写tsql的单元测试用例。

答案 2 :(得分:1)

我不知道哪个工具可以对SQL语句或存储过程进行单元测试。 我经常编写SQL脚本来测试它。

  1. 创建一个空数据库,当然,结构与原始数据库相同。
  2. 准备数据(从原始数据库导入一些数据)。
  3. 调用存储过程。
  4. 然后查看数据是否正确。
  5. 有时写一些像

    这样的断言语句
    IF EXISTS (SELECT * FROM XX INNER JOIN XXX ON XXXXXXXX WHERE XXX=XXX)
         RAISEERROR XXXXXX
    

    如果抛出某些异常或错误,则可以检查存储过程。

    但这是浪费时间。

    我通常在大多数时间检查存储过程的所有执行路径,然后测试期望点的主要错误。

答案 3 :(得分:1)

我一直使用TST作为SQL Server的测试框架,结果非常好。 它运作良好,我甚至可以将它作为我们CI城市环境的一部分进行整合。

关键是如何设置测试数据。无论您选择哪种测试框架,请务必应用Test Data Builder模式。如果不这样做,您可能会很快得到一些测试重构问题。

答案 4 :(得分:1)

dbunit.org的DbUnit是一个很好的框架。另一个很棒的工具是来自tsqlt.org的TSqlUnit和tsqlt。

答案 5 :(得分:0)

我一直在使用 TestContainer(Mysql) 来模拟 mysql 服务器。 使用 Kotlin/Java JUnit5 作为测试运行器。 所以在测试用例中,它会

  1. 启动测试容器
  2. 测试所需的种子数据。
  3. 执行存储过程。
  4. 断言数据是准确的。