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