2

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

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

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

4

2 回答 2

3

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

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

模板:

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 ;
于 2012-11-16T16:19:35.933 回答
1

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

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

要将 REF CURSOR 转换为 XML,您可以使用 DBMS_XMLGEN,如AskTom 中描述的 ref 光标

于 2012-09-26T19:37:38.850 回答