SQL存储过程测试(6)——当待测存储过程返回out参数时 如何判断测试结果是否通过

发表于:2009-11-13 15:21

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:igoone    来源:51Testing软件测试博客

  问题

  如何测试返回一个out参数的存储过程。

  设计

  声明一个合适类型的变量,用于接受out参数,然后使用out参数调用待测存储过程。

  方案

  例如,设想包含待测存储的数据库有一个数据库表,这个表定义如下:

create table tb1Employees

(

    empID char(3) primary key,

    empLast varchar(35) not null,

    empDOH datatime not null

)

  设想待测存储过程有一个out参数,这个参数用于保存返回结果,其定义如下:

create procedure usp_GetLast

    @empID char(3),

    @empLast varchar(35) out

as

    select @empLast = empLast from tb1Employees where empID = @empID

    return @@rowcount

  那么用于测试这个存储过程的T-SQL代码可以是:

declare @input char(3)

declare @empLast varchar(35)

declare @retval int

declare @expectedLast varchar(35)

declare @expectedRet int

set @input = 'e22'

set @expectedLast = 'Baker'

set @expectedRet = 1

exec @retval = dbEmployees.dbo.usp_GetLast @input,@empLast out

if(@retval = @expectedRet and @empLast = @expectedLast)

    print 'Pass'

else

    print 'FAIL'

  存储过程usp_GetLast()接受一个雇员ID作为输入参数。这个存储过程取回雇员ID与输入ID相匹配的行并且把该雇员的姓氏存入一个out参数。该存储过程返回由SELECT语句所返回的行数。可以让AUT使用这个返回值作为一种错误的检查机制:如果返回值为0,就意味着没有找到与之匹配的雇员,但是如果返回值比1大,则说明有多于一个雇员拥有相同的ID(大多数情况下很可能出现了什么错误)。

  注解

  SQL存储过程有一个常用的设计模式,即存储过程可以通过out参数返回一个或多个值。当存储过程要返回的值不是Int类型的时候,这种模式是必须的,因为return关键字只接受Int类型的变量。当存储过程必须要返回多个值的时候,这种模式也是必需的。

  调用带out参数的存储过程就跟调用只有输入参数的存储过程一样,只不过需要在接受输出变量的参数后面要加上SQL关键字out。上述方案是根据参数的位置进行调用的。也可以通过参数名称进行调用。但是,这种调用可能有些混乱,因为一旦使用了"@name = value"这种形式,后面的参数也必须以"@name = value"这种形式进行传递。

相关阅读:

SQL存储过程测试(5)——当待测存储过程返回行集的时候 如何判断测试结果是否通过

SQL存储过程测试(4)——从T-SQL测试套件里把测试结果直接写入文本文件

SQL存储过程测试(3)——创建T-SQL测试套件

SQL存储过程测试(2)——使用BCP工具导入测试用例数据

SQL存储过程测试(1)——创建测试用例以及测试结果存储

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号