我在SQL Server 2012上使用TSQLUNIT单元测试更新/插入存储过程时发现了一些奇怪的东西。当我调用执行tsu_RunTests 时,我的测试过程会运行,但会出现意外行为。调用我的原始存储过程的代码行,但没有按预期对数据库表进行实际更新或插入。这种行为是否有正当理由?或者这是一个我需要注意的错误?我注意到当我在测试过程之外执行相同的原始存储过程时,它工作正常。
答案 0 :(得分:0)
您可以对每个存储过程使用Default参数,并在tsu_RunTests中使用这些存储过程时将此@IsTest
参数设置为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
编辑:存储过程代码必须如下所示:
If @@NESTLEVEL <> 1 Print 'Befor Update Message'
If @@NESTLEVEL = 1 Begin
Update YourTable
Set ...
End
If @@NESTLEVEL <> 1 Print 'After Update Message'