在SQL Developer的单元测试框架中验证PL / SQL存储过程OUT REF CURSOR

时间:2012-09-26 04:17:43

标签: oracle unit-testing plsql oracle-sqldeveloper

我正在打开REF CURSOR的包中开发一系列PL / SQL存储过程,这些RES CURSOR作为OUT参数传递给调用者,以便与另一个框架进行互操作。我正在使用SQL Developer,最近开始考虑使用内置的测试功能。

我正在寻找一种使用SQL Developer的单元测试框架来验证REF CURSOR结果的方法。我开发了一些分页逻辑,我想确保它正常运行所以我希望我可以验证我有正确的行数,并且它们的行号在相应页面的范围内。

我发现了一个类似的问题here,但该解决方案使单元测试绝对无用(至少据我所知),因为它在运行程序后实际上没有执行任何验证。如果有人可以解释如何验证它或向我展示我在Oracle论坛的解决方案中缺少的内容,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

进程验证可用于单元测试SQL Developer无法处理的数据类型。

  1. 创建一个实现并将其与虚拟过程或函数链接(同步)。
  2. 设置参数和结果,以便测试以“成功”
  3. 完成
  4. 使用显示的模板
  5. 使用'User Pl / Sql Code'创建流程验证

    模板:

    DECLARE
      l_Cursor  SYS_REFCURSOR ;
    BEGIN
      OPEN l_Cursor FOR '<SQL goes here>' ;
      MY_PROCEDURE( l_Cursor ) ;
      <do validation>
      CLOSE l_Cursor;
      IF <not valid> THEN
        RAISE PROGRAM_ERROR ;
      END IF ;
    END ;
    

答案 1 :(得分:1)

我们通过比较两个REF游标的XML表示,在PL / SQL中做了类似的事情(尽管没有使用SQL Developer的单元测试框架):

  • 定义一个“预期”查询,它将您的预期输出作为REF CURSOR返回(通常从双重中选择一些常量)
  • 运行“预期”和“真实”查询,并将其输出转换为XML / HTML /无论
  • 比较输出

要将REF CURSOR转换为XML,您可以使用DBMS_XMLGEN,如AskTom on describing a ref cursor

所示