2010-11-06 41 views
0

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

现在我们试图将单元测试引入到系统中,主要测试存储过程以及它们之间的交互。所以,我不希望运行语句和存储过程特别具有挑战性。

困难的部分是在测试运行之前和之后维护数据库的正确状态,即使发生任何异常。是的,我可以利用using声明和“IDisposable”。对我来说更难的部分是(至少根据我所做的以及对编程的了解):我如何安全地一遍又一遍地恢复MS SQL,Oracle和Syabse数据库的状态?尽管我愿意考虑这一点,但我不应该假设只有一个用户在任何时候都在使用它。我希望所有3个数据库都为此提供机制,我只需要使用正确的驱动程序触发它们(我们已经测试过ODBC了 - 它似乎对我们有用)。

请留下您的建议以及问题,如果您有它们。

回答

2

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

  1. 每次测试后运行该数据库中的数据创建脚本。您只需要创建数据,而不是表,存储过程和触发器。运行测试时这些应该保持静态。如果数据创建过于耗时,这将无法工作。

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

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