0

SQL Server 2012でTSQLUNITを使用して更新/挿入ストアドプロシージャを単体テストしているときに、何か奇妙なことに気づきました。Exectsu_RunTestsを呼び出すと、テストプロシージャは実行されますが、予期しない動作が発生します。元のストアドプロシージャを呼び出すコードの行は実行されますが、データベーステーブルに対して実際の更新や挿入が期待どおりに行われていません。この動作には正当な理由がありますか?それとも、これは私が注意を払う必要のあるバグですか?テストプロシージャの外で同じ元のストアドプロシージャを実行すると、正常に機能することに気付きました。

4

1 に答える 1

0

@IsTesttsu_RunTests でこれらのストアド プロシージャを使用する場合、各ストアド プロシージャに Default パラメータを使用し、このパラメータを true に設定できます。

CREATE PROCEDURE orginal_proc
    --@parameter_name 
    @IsTest BIT = 0
AS
    if @IsTest <> 1 Begin
    --  Test statements
    End Else Begin
    --  statements
    End 
GO

@@NESTLEVELプロシージャが直接実行されるか、他のプロシージャによって実行されるかを確認するために使用することもできます。

CREATE PROCEDURE orginal_proc
    --@parameter_name 
AS

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

EDIT:ストアドプロシージャコードは以下のようにする必要があります:

If @@NESTLEVEL <> 1 Print 'Befor Update Message'
If @@NESTLEVEL = 1 Begin
   Update YourTable
   Set ...
End
If @@NESTLEVEL <> 1 Print 'After Update Message'
于 2012-08-29T06:04:55.563 に答える