2012-05-10 16 views
3

tSQLt測試框架需要爲數據庫設置TRUSTWORTHY ON,併爲服務器啓用SQL CLR。tSQLt TRUSTWORTHY和CLR要求

爲什麼需要這些?沒有CLR對象可以實現相同/相似的功能嗎?

+2

顯而易見的答案是,tSQLt的某些部分由需要訪問外部資源或非託管代碼的SQL CLR代碼組成。至於'是否有可能',好吧,沒有任何東西阻止有人嘗試構建一個運行在純T-SQL中的SQL單元測試框架,但是我希望他們能夠幸運...... – AakashM

回答

4

以下功能完全實現爲CLR代碼和將特別困難的(也可能是不可能的),而不CLR做:

  • CaptureOuput:用於記錄和打印到控制檯
  • SuppressOutput驗證輸出有用:在內部使用,以幫助保持清潔控制檯從重新命名的ob所得警告jects(特別是在FakeTable)
  • ResultSetFilter:必要,用於捕獲從產生的多個結果的存儲過程產生的特定的結果組設置
  • AssertResultSetsHaveSameMetaData:用於所述元數據進行比較的兩個結果集
  • NewConnection:允許任意SQL命令將在新連接中執行。當連接的某些屬性必須不同時有用於測試。 (如果內存正確地爲我服務,這可能是今天TRUSTWORTHY ON的唯一原因)。

除此之外,tSQLt在內部使用CLR爲非常大的字符串生成格式化的輸出,比如可以通過比較兩個表生成的格式化輸出;並在重命名對象時(例如FakeTable或SpyProcedure)生成新的對象名稱。

可以想象,tSQLt可以被修改以刪除這些功能,並且仍然可以使用其基本功能集(當然有一些限制)。但是,隨着我們展望未來tSQLt版本將會發生什麼,很可能在CLR中會做更多的事情。

+0

謝謝Dennis。 Ed(http://msdn.microsoft.com/en-us/library/ms345106.aspx)提到的非對稱密鑰方法是否可能允許刪除TRUSTWORTHY ON要求? –

2

如果你想使用tSQLt,你可能沒有任何選擇,只能啓用SQL CLR。

有一種方法可以通過創建一個不對稱密鑰來避免將數據庫設置爲TRUSTWORTHY ON的要求 - 請參閱http://msdn.microsoft.com/en-us/library/ms345106.aspx

如果這是不能接受的,還有其他數據庫單元測試工具,其不需要的對象在數據庫中創建 - 例如DbFit