0

在 SQL Server 2012 上使用 TSQLUNIT 对更新/插入存储过程进行单元测试时,我注意到一些奇怪的事情。当我调用Exec tsu_RunTests时,我的测试过程运行但出现意外行为。代码中调用我的原始存储过程的行已执行,但没有按预期对数据库表进行实际更新或插入。这种行为有正当理由吗?或者这是一个我需要非常注意的错误?我注意到,当我在测试过程之外执行相同的原始存储过程时,它工作正常。

4

1 回答 1

0

您可以为每个存储过程使用 Default 参数,并@IsTest在 tsu_RunTests 中使用这些存储过程时将此参数设置为 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'
于 2012-08-29T06:04:55.563 回答