暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 自动返回游标的过程测试

askTom 2018-03-27
396

问题描述

嗨,团队,

在我的项目中,我们为PL/SQL构建了测试套件,它测试了基本的测试用例,例如输入/输出比较。

因此,在工具中,如果我使用输入和预期输出配置过程P1 (p_in number,P_out OUT number),则使用apex构建的工具将运行配置的测试用例,并对输入和输出进行比较,并给出报告。只要我有简单的输入输出数据类型,这将起作用。

我如何将其扩展到光标的out参数。(为简单起见,我不考虑为ref curosrs考虑动态sql)。

我正在考虑从all_source中提取过程中使用的select,并在游标for循环中使用它来获取游标返回的行。因此,对于这个简单的用例,用户将测试一个返回游标的过程,他将配置预期的行数。当测试套件运行时,它将采用查询形式代码运行,并将计数值与用户期望的值进行比较,并根据匹配通过/失败测试用例。

所以现在,有没有更好的方法来做一些基本的自动化测试过程,返回游标?
任何建议都非常重视。

谢谢。

专家解答

一种基本方法是将游标获取到XML或JSON中。然后将此文档与您期望的XML/JSON进行比较,如果查询正确的话。

您可以使用dbms_xmlgen将ref游标即时转换为XML。例如:

create or replace function f 
  return sys_refcursor as
  cur sys_refcursor;
begin
  open cur for
    select * from dual;
    
  return cur;
end f;
/

declare
  ctx  dbms_xmlgen.ctxhandle; 
  doc  xmltype;
  
  expected_xml varchar2(1000) := '
 
  X
 

';
begin

  ctx := dbms_xmlgen.newContext(f);
 
  doc := dbms_xmlgen.getxmltype (ctx, dbms_xmlgen.none); 
  
  dbms_output.put_line(doc.getStringVal());
    
  if doc.getStringVal() = expected_xml then
    dbms_output.put_line('*** SUCCESS ***');
  else
    dbms_output.put_line('*** FAILURE! ***');
  end if;

end;
/


 
  X
 


*** SUCCESS ***


要计算它返回多少行,请使用一些XML向导来计算 元素的数量。

为此构建完整的解决方案将是一个问题。幸运的是,开源测试框架utPLSQL包括游标测试!

请访问:

http://utplsql.org/utPLSQL/v3.0.4/userguide/expectations.html
https://github.com/utPLSQL
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论