如何测试具有内部状态的 oracle 包?

How to test oracle packages with inner state?

假设我们有一个 oracle 包,它是用从 table 持有全局参数中获取的一些值初始化的。尽管这是一种丑陋的做法,但它可以在生产中工作,因为参数将在安装期间设置并且不太可能经常更改。但是当一个人正在测试包时,需要在每个案例之前重新初始化它的状态。

我尝试了两种方法:

  1. 立即执行'ALTER PACKAGE my_package COMPILE';
  2. dbms_session.reset_package;

第一个在极少数情况下不起作用(我不知道为什么)。

第二个重置当前会话接触的所有包,包括包含测试用例的包,因此任何 reset_package 的调用都会导致中止测试执行.

当需要在测试执行期间更改状态时,我需要什么才能正确测试具有内部状态的包?

至少有两种方法可以做到这一点。首先,没有人禁止您发布 'Initialize' 子例程并在每次测试前使用它来重新读取变量。我想这是一个更好的方法,但如果你愿意,你可以向这个包中添加类似

的内容
procedure MyPublicMethod is
begin
  if UnitTesting.RightNow then Initialize; end if;
  ...
end;

并自动获得相同的效果。