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