Best-Practices

儲存過程的單元測試

  • February 13, 2020

我已經考慮這個問題很久了。

基本問題是:如何對儲存過程進行單元測試?

我看到我可以相對容易地為經典意義上的函式設置單元測試(我的意思是它們得到零個或多個參數並返回一個值)。但是,如果我考慮一個看似簡單的過程在某處插入一行的真實範例,並且在插入之前或之後有幾個觸發器執行此操作,那麼即使定義“單元”的邊界也非常困難。我應該只測試INSERT它本身嗎?我認為這相當簡單——價值相對較低。我應該測試整個事件鏈的結果嗎?除了這是否是單元測試的問題之外,設計一個合適的測試可能是一項相當艱鉅的工作,其中會出現許多額外的問號。

然後是不斷變化的數據的問題。在UPDATE影響不止幾行的情況下,每個可能受影響的行都必須以某種方式包含在測試案例中。s等的進一步困難DELETE等等。

那麼如何對儲存過程進行單元測試呢?複雜性是否存在完全絕望的臨界點?維護需要哪些資源?

編輯另一個小問題,基於 AlexKuznetsov 的回答:或者是否有一個門檻,在它之下它是完全沒用的?

我們已經這樣做了快五年了,我們認為明確地測試修改絕對是可行的,但是速度很慢。此外,除非我們使用單獨的數據庫,否則我們不能輕鬆地從多個連接同時執行此類測試。相反,我們應該隱式地測試修改——我們使用它們來建構至少一些測試數據,並驗證我們的選擇是否返回了預期的結果。

我寫了一篇題為“關閉那些漏洞:從單元測試 T-SQL 中吸取的教訓”的文章,以及一些部落格文章

關於您的問題“複雜性是否存在完全沒有希望的門檻?”,複雜的模組比簡單的模組更需要測試。

為了簡化維護,我們生成了預期的結果,並將它們儲存在單獨的文件中——這會產生巨大的差異。

引用自:https://dba.stackexchange.com/questions/21065