如何使用内部状态测试oracle包



假设我们有一个oracle包,它是用从包含全局参数的表中获取的一些值初始化的。尽管这是一种丑陋的做法,但它可以在生产中工作,因为参数是在安装过程中设置的,不太可能频繁更改。但是,当测试包时,需要在每次出现这种情况之前重新初始化其状态。

我尝试了两种方法:

  1. 立即执行"ALTER PACKAGE my_PACKAGE COMPILE"
  2. dbms_session.reset_package

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

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

当在测试执行过程中需要更改状态时,我需要什么来正确测试具有内部状态的包?

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

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

并自动获得相同的效果。

最新更新