6

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

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

4

3 回答 3

7

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

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

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

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

于 2012-05-10T20:41:39.163 回答
6

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

于 2016-03-19T13:59:39.597 回答
3

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

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

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

于 2012-05-10T12:03:31.577 回答