代码之家  ›  专栏  ›  技术社区  ›  Nix

自动化SQL Server单元测试

  •  6
  • Nix  · 技术社区  · 14 年前

    我知道有一些方法可以自动化SQLServer“单元测试”,但我的问题略有不同。

    在验证需求时,我们编写了一系列SQL脚本,如果成功,基本上不会返回任何结果。

    所以基本上

    1. 执行另一个查询
    2. 运行查询。

    要求#1描述:显示我的问题

    1. 查询以检查目标表是否存在且为空
    2. 查询检查数据传输是否正确
    3. 断言业务规则的查询

    有人建议使用这个单元,而且几乎没有关于它的文档。如果我们使用SSIS单元,它是否更像安装过程 断言

    3 回复  |  直到 14 年前
        1
  •  2
  •   Nix    14 年前

    我不清楚您的问题是关于单元测试ssis—ssis包中的业务规则,还是这只是达到目的的一种手段—也许这很有用:

    http://ssisunit.codeplex.com/

    大多数xUnit框架都支持setup和teardown结构。我认为您需要的是使用测试的设置部分来执行ssis包,并使用拆卸步骤来重置数据库状态。

    http://msdn.microsoft.com/en-us/library/bb381703(VS.80).aspx

    所以回答你的问题,是的,我认为你是在重新发明轮子;但可能现有的车轮不适合您的问题;)

        2
  •  1
  •   Sam    14 年前

    创建一个名为myResult的变量。查看>&燃气轮机;其他窗口>&燃气轮机;变量。确保您处于包的控制流级别,并且没有单击进入某个任务/步骤。您希望此变量的作用域为包级别。将其设置为Int32数据类型,并将默认值设置为错误代码。

    通过双击这两个SQL任务之间的行来检查结果。设置为对表达式求值,并设置如下表达式:@myResult==0

    执行下一个SQL任务,将结果放入同一个变量

    像以前一样检查结果

    根据需要继续。。。

    可以使用 DTEXEC.exe runtime . 返回代码列在那里,所以您可能可以集成到另一个进程中。


    --额外的东西--

    因为您希望这对于许多情况都是通用的,所以您可以编写一些代码从表中提取测试用例及其各个步骤,也可以在SSIS中执行相同的操作(也许!)。

    在SSIS中,您可以创建一个Foreach循环容器,该容器将对存储在变量中的ADO结果集进行操作。根据“step type”-SQLCMD或SSIS包,您可以通过分支执行包或使用表达式执行SQL语句来更改包路径或SQL语句等相关信息。为了简单起见,每个步骤都需要一个服务器、sqlcmd和packagename字段-SQL任务不需要packagename,ssis任务不需要sqlcmd。

        3
  •  0
  •   Nix    14 年前

    经过大约一个月的研究,目前还没有一个OTS项目能解决这个问题。

    我们正在寻找一个允许您定义如何验证需求的工具集。在本例中,我们需要一个通用例程来执行SQL脚本、加载数据和运行SSIS包,目前唯一的方法是编写自己的编排工具。

    我们使用.NET进行编排,但@Sam确实提供了一种使用SSIS进行编排的有用方法。多亏了@JasonHorner的建议,我们现在正在考虑让它看起来和感觉更像一个单位,但在一个更有组织的水平。