使用TSQLUNIT进行SQL单元测试

时间:2012-08-29 05:13:41

标签: sql sql-server tsql unit-testing tsqlunit

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

1 个答案:

答案 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'