14

I am new to working with SQL database but have been confronted with testing my database. For security reasons any queries or updates are done through stored procedures.

It was suggested to me by a peer to use stored procedures to test other stored procedures. Is this a good or bad solution to unit testing my stored procedures to ensure they are doing what they are suppose to be doing?

4

6 回答 6

12

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

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

于 2013-04-25T02:29:40.300 回答
7

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

于 2013-11-25T10:48:33.187 回答
2

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

于 2013-11-26T04:35:30.533 回答
1

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

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

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

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

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

但这是浪费时间。

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

于 2013-04-20T23:37:44.693 回答
1

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

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

于 2013-06-19T12:04:24.460 回答
0

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

  1. 启动测试容器
  2. 测试所需的种子数据。
  3. 执行存储过程。
  4. 断言数据是准确的。
于 2021-04-22T04:28:02.760 回答