You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

utPLSQL测试与代码覆盖率异常及命名规范定制咨询

utPLSQL新手常见问题解答

问题1:测试脚本执行正常,但代码覆盖率结果为空

  • 对象名称匹配错误:Oracle对未加双引号的对象名会自动转为大写,若被测试对象(如Test.TfTest)是大小写敏感的(创建时用了双引号),覆盖率配置必须严格匹配大小写并带双引号,例如"Test"."TfTest";若未用双引号,需确保配置中使用大写名称(如TEST.TFTEST)。
  • 未指定正确的对象类型:代码覆盖率针对的是包体、函数、过程等可执行对象,若配置的是包规范而非包体,会导致无数据。需确认覆盖对象是Test.TfTest的包体(若为包)或函数/过程本身。
  • 测试未触发被测试代码:即使测试脚本执行成功,若测试用例未调用到被测试对象的核心逻辑(比如空测试、仅调用无关代码),覆盖率也会为空。可添加断言验证被测试函数/过程的返回值,确认代码路径被执行。
  • 权限不足:执行测试的用户需要读取被测试对象源代码的权限(如SELECT ALL_SOURCE或SELECT DBA_SOURCE),否则无法收集覆盖率数据。

问题2:为测试包及过程加双引号后,测试结果显示0/0

  • 严格匹配带双引号的对象名称:若被测试对象或测试包使用了双引号(如"MyTestPackage"),所有引用必须完全匹配,包括模式名。例如在测试包的注解中指定被测试对象:
    --%test
    procedure test_my_proc is
    begin
      ut.expect("MySchema"."MyTestPackage".my_proc()).to_be_true();
    end;
    
  • 避免不必要的双引号:除非必须使用大小写敏感的名称,否则尽量不给测试包、过程加双引号,Oracle默认的大写无引号命名更易被utPLSQL识别。
  • 检查测试套件注册逻辑:若手动注册测试套件,需确保注册时的名称与实际测试包的双引号名称完全一致:
    begin
      ut_suite_manager.add_suite('"MySchema"."MyTestPackage"');
    end;
    /
    

问题3:能否修改utPLSQL生成的模板,使其遵循指定SQL标准

可以自定义utPLSQL的生成模板,实现你需要的风格:

  • 自定义模板文件:复制utPLSQL默认模板(通常在安装目录的templates文件夹下),修改内容:
    • 将CREATE、PACKAGE等Oracle保留字改为大写;
    • 将对象引用改为"&schema.."."&package_name"格式(模式+双引号限定);
    • 将蛇形命名的变量(如test_package_name)替换为驼峰命名(如TestPackageName)。
  • 设置默认模板:通过更新ut_configuration表,将自定义模板设为默认,后续生成测试包时自动使用:
    update ut_configuration set value = '/path/to/your/custom_template.tpl' where name = 'default_template';
    commit;
    
  • 保留内置占位符:修改模板时需保留utPLSQL的内置占位符(如&suite_name.、&test_procedures.),否则生成的测试包无法正常工作。

内容的提问来源于stack exchange,提问作者Jamesit0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:16:12