【问题标题】:Testing stored procedures' logic测试存储过程的逻辑
【发布时间】:2010-02-19 00:57:49
【问题描述】:

我们在 TSQL 存储过程中有相当多的逻辑。作为自动化测试的忠实粉丝,我开始为存储过程编写自动化测试。

我通过从 C# 项目中调用存储过程来测试它们。我使所有涉及数据库的测试都从基类继承,以确保测试在从未提交的 TransactionScope 中运行。有几个与此相关的问题:
- 与不接触数据库的测试相比,测试速度较慢,但​​我认为对此无能为力。
- 有时,当我想在运行测试逻辑之前让数据库进入我需要的状态时,我会遇到 FK 问题。例如。当我需要截断 FK 引用的表时,您不能这样做。我还需要删除引用表中的行。
- 有时我需要编写一个新的存储过程或查询以使数据库进入您需要的状态。另一方面,我经常发现我以后需要一个类似的过程来获得新功能。

尽管有这些缺点,我仍然选择为存储过程逻辑编写测试,因为我们在存储过程中有相当多的逻辑。您是否使用类似的方法、完全不同的方法(例如 TSqlUnit)或者您不费心测试存储过程?

【问题讨论】:

  • 这是一个方便的列表,列出了为什么存储过程因价值相对较低而令人痛苦的原因。
  • 我曾经在SP阵营中根深蒂固,但我的想法变了。 CRUD 的存储过程很麻烦;使用 OR 映射器和参数化内联查询存储过程似乎不太重要。
  • 不幸的是,SP 是我必须使用的,而且恐怕不会改变。

标签: database unit-testing tsql


【解决方案1】:

我认为从代码中测试您的存储过程是有好处的,因为它将所有测试保存在一个地方,可以轻松地在开发机器或构建机器上运行。

虽然它违反了单元测试原则(不是为每个测试设置和拆除),但我使用一个专门用于测试的数据库副本和一个以我需要的方式设置数据的脚本。可以根据需要重新运行此脚本以获得干净的测试数据库。这样做的缺点是不断更新脚本,因为您提到外键很痛苦。我使用 SQL Server Management Studio 插件编写数据插入脚本以简化此过程。

我相信这是我使用的插件:http://sqlblogcasts.com/blogs/seanprice/archive/2007/08/28/data-scripter-add-in-for-management-studio.aspx

【讨论】:

    猜你喜欢
    • 2011-11-04
    • 2011-05-28
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多