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

时间:2015-03-25 06:40:20

标签: oracle unit-testing testing oracle11g

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

我尝试了两种方法:

  1. 立即执行'ALTER PACKAGE my_package COMPILE';
  2. dbms_session.reset_package;
  3. 第一种在少数情况下不起作用(我不知道为什么)。

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

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

1 个答案:

答案 0 :(得分:0)

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

的软件包
procedure MyPublicMethod is
begin
  if UnitTesting.RightNow then Initialize; end if;
  ...
end;

并自动获得相同的效果。