2012-08-29 144 views
0

當我在SQL Server 2012上使用TSQLUNIT測試更新/插入存儲過程時,我注意到一些奇怪現象。當我調用執行tsu_RunTests時,我的測試過程運行但出現意外行爲。調用我的原始存儲過程的代碼中的行被執行,但沒有按預期對數據庫表進行實際更新或插入。這種行爲是否有正當理由?或者這是我需要多加關注的錯誤?我注意到,當我在測試過程之外執行相同的原始存儲過程時,它工作正常。使用TSQLUNIT進行SQL單元測試

+0

如何檢查數據是否被插入/更新?也許tsqlunit在運行測試後執行自動回滾? –

+0

這是我不確定的。到目前爲止,我還沒有從文檔中看到它這樣做,但想問問是否有人知道這一點。 – Kobojunkie

回答

0

對於每個存儲過程,可以使用Default參數,並在tsu_RunTests中使用這些存儲過程時將此@IsTest參數設置爲true。

CREATE PROCEDURE orginal_proc 
    [email protected]_name 
    @IsTest BIT = 0 
AS 
    if @IsTest <> 1 Begin 
    -- Test statements 
    End Else Begin 
    -- statements 
    End 
GO 

你也可以使用@@NESTLEVEL做檢查,你的程序直接執行或者由其他程序執行。

CREATE PROCEDURE orginal_proc 
    [email protected]_name 
AS 

    if @@NESTLEVEL <> 1 Begin 
    -- Test statements 
    End Else Begin 
    -- statements 
    End 
GO 

編輯:存儲過程的代碼必須象下面這樣:

If @@NESTLEVEL <> 1 Print 'Befor Update Message' 
If @@NESTLEVEL = 1 Begin 
    Update YourTable 
    Set ... 
End 
If @@NESTLEVEL <> 1 Print 'After Update Message' 
+0

你有好主意。我所擁有的是我的Original過程中的打印語句,用於在UPDATE語句之前和之後打印一條語句,並且兩條打印語句都隨着消息在消息中顯示而運行。只是實際的更新沒有發生,我想驗證這是預期的而不是某個問題。 – Kobojunkie

+0

@Kobojunkie:請參閱我的編輯。 –