我正在开发一个有很多plsql代码的项目,并希望在我们的代码库中添加更多的单元测试。我喜欢测试的一些程序/函数不在包规范中,我没有办法改变。
到目前为止,唯一的想法是在测试之前将数据库编译成一个特殊的包规范,指定了被测程序。我认为这样会工作,但是我想知道是否有一个更简单的方法,一些邪恶的秘密oracle黑客也许;-)
我使用JUnit / DBUnit从Java测试。
BR
坦率
有一种方法可以做到这一点,只要你在10g或更高版本。它被称为条件编译。这是一个非常整齐的功能,提供特殊的语法,所以我们可以在编译时更改我们的PL / sql代码。
原文链接:https://www.f2er.com/oracle/205757.html正因为如此,我一直使用这个功能准确地公开了一个规范的私有包,所以我可以对它们运行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>
我们可以做更多的条件编译。它在文档中被覆盖。 Find out more.