SQL 单元测试存储过程

问题描述 投票:0回答:6

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

一位同行建议我使用存储过程来测试其他存储过程。 对于对我的存储过程进行单元测试以确保它们正在执行它们应该执行的操作,这是一个好还是坏的解决方案?

sql sql-server sql-server-2008
6个回答
12
投票

我使用 Visual Studio 找到了一个出色的解决方案: Visual Studio 单元测试

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


7
投票

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


2
投票

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


1
投票

我一直在使用 TST 作为 SQL Server 的测试框架,并取得了非常积极的结果。 它运行良好,我什至可以将其集成到 Team City 中的 CI 环境中。

关键是要非常小心如何设置测试数据。无论您选择什么测试框架,请务必应用测试数据生成器模式。如果不这样做,您可能很快就会遇到一些测试重构问题。


1
投票

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

  1. 创建一个空数据库,当然结构和原来的一样。
  2. 准备数据(从原数据库导入部分数据)。
  3. 调用存储过程。
  4. 然后查看数据是否正确。

有时会写一些断言语句,例如

IF EXISTS (SELECT * FROM XX INNER JOIN XXX ON XXXXXXXX WHERE XXX=XXX)
     RAISEERROR XXXXXX

如果抛出一些异常或错误,那么您可以检查存储过程。

但这只是浪费时间。

我通常大部分时间都会检查存储过程的所有执行路径,只测试主要错误期望点。


0
投票

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

  1. 启动测试容器
  2. 测试所需的种子数据。
  3. 执行存储过程。
  4. 断言数据准确。
© www.soinside.com 2019 - 2024. All rights reserved.