tSQLt TRUSTWORTHY和CLR要求

时间:2012-05-10 08:29:06

标签: sql-server testing sqlclr tsqlt

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

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

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

如果你想使用tSQLt,你可能没有任何选择,只能启用SQL CLR。​​

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

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