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

2024-03-31

我正在开发一个包含大量 plsql 代码的项目,并希望向我们的代码库添加更具体的单元测试。我喜欢测试的一些过程/函数不在包规范中,我无法更改它。

有没有办法访问这些“私有”plsql 过程而不将它们添加到规范中?

到目前为止,我唯一的想法是在测试之前将一个特殊的包规范编译到数据库,该规范指定了被测试的过程。我想这会起作用,但我想知道是否有更简单的方法,也许是一些邪恶的秘密预言机黑客;-)

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

BR Frank


有一种方法可以做到这一点,前提是您使用的是 10g 或更高版本。这称为条件编译。这是一个非常简洁的功能,它提供了特殊的语法,因此我们可以在编译时更改 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;
/

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

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

SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE

SQL>

现在我设置条件标志并重新编译包,就像变魔术一样......

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>

功能私有化就像您想象的一样简单:

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>

我们可以通过条件编译做更多的事情。它包含在文档中。了解更多。 http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/fundamentals.htm#BABIHIHF

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法访问私有 plsql 过程以进行测试? 的相关文章

随机推荐