【问题标题】:tSQLt TRUSTWORTHY and CLR requirementtSQLt TRUSTWORTHY 和 CLR 要求
【发布时间】:2012-05-10 08:29:06
【问题描述】:

tSQLt 测试框架需要为数据库设置 TRUSTWORTHY ON,并为服务器启用 SQL CLR。​​

为什么需要这些?是否可以在没有 CLR 对象的情况下实现相同/相似的功能?

【问题讨论】:

  • 显而易见的答案是 tSQLt 的某些部分由需要访问外部资源的 SQL CLR 代码或非托管代码组成。至于“有没有可能”,好吧,没有什么能阻止有人尝试制作一个在纯 T-SQL 中运行的 SQL 单元测试框架,但我祝他们好运……

标签: sql-server testing sqlclr tsqlt


【解决方案1】:

以下功能完全作为 CLR 代码实现,如果没有 CLR,将特别困难(并且可能不可能):

  • CaptureOutput:用于记录和验证打印到控制台的输出
  • SuppressOutput:在内部用于帮助保持控制台清除因重命名对象(尤其是在 FakeTable 中)产生的警告
  • ResultSetFilter:捕获特定结果集所必需的,该结果集从生成多个结果集的存储过程中生成
  • AssertResultSetsHaveSameMetaData:用于比较两个结果集的元数据
  • NewConnection:允许在新连接中执行任意 SQL 命令。当连接的某些属性必须不同时,用于测试。 (如果我没记错的话,这可能是今天 TRUSTWORTHY ON 的唯一原因。

除此之外,tSQLt 在内部使用 CLR 为非常大的字符串生成格式化输出,例如可以通过比较两个表生成的字符串;以及在重命名对象时生成新的对象名称(例如 FakeTable 或 SpyProcedure)。

可以想象,可以对 tSQLt 进行修改以删除这些功能,并且仍然可以使用其基本功能集(当然有一些限制)。然而,当我们展望 tSQLt 的未来版本时,CLR 很可能会做更多的事情。

【讨论】:

【解决方案2】:

TRUSTWORTHY ON 不再需要。 请参阅发行说明: http://tsqlt.org/748/tsqlt-v1-0-5873-27393-release-notes/

【讨论】:

    【解决方案3】:

    如果你想使用 tSQLt,你可能别无选择,只能启用 SQL CLR。​​

    有一种方法可以通过创建非对称密钥来绕过将数据库设置为 TRUSTWORTHY ON 的要求 - 请参阅 http://msdn.microsoft.com/en-us/library/ms345106.aspx

    如果这是不可接受的,还有其他不需要在数据库中创建对象的数据库单元测试工具 - 例如DbFit

    【讨论】:

      猜你喜欢
      • 2017-07-29
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      相关资源
      最近更新 更多