【问题标题】:Testing stored procedures using MSTest (.Net)使用 MSTest (.Net) 测试存储过程
【发布时间】:2011-05-06 02:17:15
【问题描述】:

我们支持 MS SQL Server 2008(可能是 2005)、Oracle 以及 Sybase。 有一个使用 AWHILE 的大型脚本,它将构建表、存储过程、视图、触发器等,并使用我们认为合理的数据填充表。

现在我们正在尝试向系统引入单元测试,主要是为了测试存储过程以及它们之间的交互。所以,我不认为运行语句和存储过程特别具有挑战性。

困难的部分是在测试运行之前和之后保持数据库的正确状态,即使发生任何异常。是的,我可以将using 语句与“IDisposable”一起使用。对我来说更难的部分是(至少基于我对编程的了解和不了解):我如何安全地反复数千次地恢复 MS SQL、Oracle 和 Syabse 数据库的状态?我不应该假设任何时候只有一个用户在使用它,尽管我愿意考虑。我希望所有 3 个数据库都为此提供机制,我只需要使用正确的驱动程序来触发它们(我们已经测试了 ODBC - 它似乎对我们有用)。

如果有问题,请留下您的建议和问题。

【问题讨论】:

    标签: .net sql-server oracle unit-testing sybase


    【解决方案1】:

    这个问题有几个解决方案:

    1. 在每次测试后运行数据库数据创建脚本。您只需要创建数据,而不需要创建表、存储过程和触发器。这些在运行测试时应该保持静态。如果数据创建仍然太耗时,这将不起作用。

    2. 按表隔离数据创建脚本并重新创建每个测试夹具所需的表数据,并且仅在该特定功能的每个测试之前运行这些脚本。这会加快速度,但您仍在每次测试之前创建数据集,并且在每次测试之前执行速度仍然可能太慢。

    3. 最佳选择:将每个测试包装在一个事务中。我假设您列出的所有数据库都支持事务。简单地说,打开一个事务,执行你的测试,验证结果,然后回滚事务。回滚将撤消您所做的任何数据更改。只要您使用相同的连接来执行存储过程修改数据并验证结果,更改应该对连接可用,但不会提交到数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 2011-12-20
      相关资源
      最近更新 更多