【问题标题】:How to test oracle packages with inner state?如何测试具有内部状态的 oracle 包?
【发布时间】:2015-03-25 18:06:27
【问题描述】:

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

我尝试了两种方法:

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

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

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

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

【问题讨论】:

    标签: oracle unit-testing testing oracle11g


    【解决方案1】:

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

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

    自动得到同样的效果。

    【讨论】:

    • 谢谢@Sanders。我希望可以避免目标包的变化,但看起来没有办法让它变得漂亮(这个词在 PL/SQL 中不受欢迎)。
    • 您可以尝试使用作业来避免它,但我想这是简单性的损失。如果需要,单元测试命令更改源代码的理念。
    • 我同意简单性。但哲学的另一点是在没有全局状态的情况下运行测试。另一方面,数据库是一堆全局状态,而且 PL/SQL 没有提供任何模拟工具(看起来它永远不会这样做,因为它内部是如此古老 - 我可以从中闻到穿孔卡片的味道)。在我看来,我不会找到简单而纯粹的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2015-01-21
    • 2022-01-14
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多