有没有办法访问私有plsql程序进行测试?

Fra*_*ank 17 oracle junit unit-testing plsql

我正在开发一个包含大量plsql代码的项目,并希望在我们的代码库中添加更多特定的单元测试.我想测试的一些程序/功能不在包规范中,我无法改变它.

有没有办法访问这些'私人'plsql程序而不将它们添加到规范?

到目前为止,我唯一的想法是在测试之前将特殊包规范编译到DB,它指定了测试中的过程.我猜这会有效,但我想知道是否有更简单的方法,一些邪恶的秘密甲骨文黑客也许;-)

我正在使用JUnit/DBUnit从Java进行测试.

BR弗兰克

APC*_*APC 24

有一种方法可以做到这一点,只要你有10克或更高.它被称为条件编译.这是一个非常巧妙的功能,它提供了特殊的语法,因此我们可以在编译时更改PL/SQL代码.

实际上,我一直在使用此功能来公开规范中的私有包,因此我可以针对它们运行UTPLSQL测试.

这是特殊的语法:

create or replace package my_pkg
as

    $IF $$dev_env_test $THEN

    PROCEDURE private_proc;

    $END

    FUNCTION public_function return date;

end my_pkg;
/
Run Code Online (Sandbox Code Playgroud)

带有双美元符号的变量是条件编译标志.

如果我描述包,我们只能看到公共包:

SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE

SQL>
Run Code Online (Sandbox Code Playgroud)

现在我设置条件标志并重新编译包,就好像通过魔法......

SQL> alter session set plsql_ccflags='dev_env_test:true'
  2  /

Session altered.

SQL> alter package my_pkg compile
  2  /

Package altered.

SQL> desc my_pkg
PROCEDURE PRIVATE_PROC
FUNCTION PUBLIC_FUNCTION RETURNS DATE

SQL>
Run Code Online (Sandbox Code Playgroud)

将功能私有化就像您认为的那样简单:

SQL> alter session set plsql_ccflags='dev_env_test:false'
  2  /

Session altered.

SQL> alter package my_pkg compile
  2  /

Package altered.

SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE

SQL>
Run Code Online (Sandbox Code Playgroud)

我们可以使用条件编译做更多的事情.它包含在文档中. 了解更多.