假设我们有一个oracle包,它是用从包含全局参数的表中获取的一些值初始化的。尽管这是一种丑陋的做法,但它可以在生产中工作,因为参数是在安装过程中设置的,不太可能频繁更改。但是,当测试包时,需要在每次出现这种情况之前重新初始化其状态。
我尝试了两种方法:
- 立即执行"ALTER PACKAGE my_PACKAGE COMPILE"
- dbms_session.reset_package
第一种在极少数情况下不起作用(我不知道为什么)。
第二个重置当前会话所接触的所有包,包括一个包含测试用例的包,因此任何reset_package的调用都会导致测试的中止执行。
当在测试执行过程中需要更改状态时,我需要什么来正确测试具有内部状态的包?
至少有两种方法可以做到这一点。首先,没有人禁止您发布"初始化"子例程,并在每次测试前使用它来重新读取变量。我想这是一个更好的方法,但如果你愿意,你可以在这个包中添加一些类似的东西
procedure MyPublicMethod is
begin
if UnitTesting.RightNow then Initialize; end if;
...
end;
并自动获得相同的效果。